Calling external support functions from other threads

Dar Scott dsc at swcp.com
Wed Jul 18 14:53:38 EDT 2012


Hmm.  I wonder.

On Jul 17, 2012, at 11:02 PM, Mark Wieder wrote:
> You may find some useful information in the notes to bug 1242.

Thank you, Mark.  

I have some questions on this.  I hope folks have some ideas.  My first...

Here is the first part of the applicable note:


Adding these notes at the request of Mark Wieder. These notes relate to using
SendCardMessage in the context of an OS event rather than in the context of an
external handler. Information was provided by Mark Waddingham.

1) Use "send in time" with SendCardMessage. This way the message will execute
at a time when the engine will allow a script to run and in an environment
where "no unpleasant sate might be hanging around". This is necessary for
externals on OS X or Windows.


I picture three types of OS "events" that might trigger external code:
1. callbacks that bypass any thread's run loop
2. callbacks that are triggered by events and called at the top of the LiveCode run loop
3. callbacks triggered by events in some other thread and called in its run loop

It is not clear to me why it is needed in case 2, but I can see how it might be and the use of "send in time" should not hurt.  I can attach callbacks to the main run loop.  

However, I don't see how "send in time" is adequate in the other cases.  It is very unlikely that the pendingMessages queue is thread safe.  There is nothing to prevent the callback from occurring in the middle of a 'send', 'cancel' or dispatch.  The use of 'send in time' might reduce the probability of problems, but it might be just an illusion.  When I say "nothing to prevent", I mean nothing that I can see, I am quite willing to be convinced.  

Does one have to convert cases 1 and 3 to case 2?  (Ouch)  Or do they somehow work?  How?

Dar







More information about the use-livecode mailing list