Looking for best practice in switching libraries
Paul Dupuis
paul at researchware.com
Sat Oct 25 11:45:05 EDT 2014
All,
I am looking for a 'best' practice in switching between versions of a
library stack.
I have several versions of a 3rd party library stack, with file names
called libraryv1.livecode, libraryv2.livecode, and libraryv3.livecode
The stack name in the 3 files is always the same - say 'library' and as
the 3rd party library references itself by name, I can't change the
stack name - just the file name.
So that means I need to open the library file for the version I want.
'start using' the library, perform a set of operations, 'stop using' the
library and close the stack - REMOVING IT FROM MEMORY - so that when I
open a different version, the stack name does not collide.
The 'close stack' entry in the dictionary correctly notes that you must
set destroyStack to true to have the stack removed form memory and that
if the close stack is called from a handle in the stack being close, the
stack will not be removed form memory until after the handler has
finished executing. All well an good. The libraries are all external
stacks.I have code in my main stack:
command closeCurrentLibrary
global gLibraryStack
if gLibraryStackis not empty then -- stop using previous library
stop using "library"
wait 0 with messages -- allow system to send and process
releaseStack message
set the destroyStack of stack "library" to true
close stack "library" -- allow system to close and remove form memory
wait 0 with messages
end if
end closeCurrentLibrary
command startLibraryv1 -- similar commands for libraryv2 and libraryv3
global gLibraryStack
put AppPath()&"libraryv1.livecode" into gLibraryStack
if there is a file gLibraryStack then
open invisible stack gLibraryStack
start using "library"
else
put empty into gLibraryStack
end if
end startLibraryv1
command useLibraryv1 -- similar commands for libraryv2 and libraryv3
send "closeCurrentLibrary" to this card in 1 millisec
wait 5 millisec with messages
send "startLibraryv1" to this card in 1 millisec
wait 5 millisec with messages
end useLibraryv1
So when I use this such as:
useLibraryv1
<do some stuff>
useLibraryv2 -- generates a message in the IDE "another stack with same
name do you want to purge" message
<do some other stuff>
I get messages from LiveCode (in the IDE) that the previous library is
still in memory when I switch libraries and do I want to purge it.
What is the BEST way to close and remove a stack from memory and be sure
it is really and truly removed?
More information about the use-livecode
mailing list