Very un-livecode-ish. 

Bob


On Jan 18, 2011, at 5:16 PM, Kee Nethery wrote:

> My two cents on how Livecode could implement this is to mimic the get URL and 
> URLstatus functionality paired with functions. For example:
> 
> This is a simple pseudo-code example of calling a threaded function 7 times 
> and then waiting until all 7 threads are complete:
> 
> on domythreads
>   global lat,long,countryName
>   put myThreadFunction(1,lat[1],long[1]) into countryName[1]
>   put myThreadFunction(2,lat[2],long[2]) into countryName[2]
>   put myThreadFunction(3,lat[3],long[3]) into countryName[3]
>   put myThreadFunction(4,lat[4],long[4]) into countryName[4]
>   put myThreadFunction(5,lat[5],long[5]) into countryName[5]
>   put myThreadFunction(6,lat[6],long[6]) into countryName[6]
>   put myThreadFunction(7,lat[7],long[7]) into countryName[7]
> 
>   repeat until threadStatus(1) = "complete" \
>      and threadStatus(2) = "complete" \
>      and threadStatus(3) = "complete" \
>      and threadStatus(4) = "complete" \
>      and threadStatus(5) = "complete" \
>      and threadStatus(6) = "complete" \
>      and threadStatus(7) = "complete" 
>     wait 1 second
>   end repeat
> end domythreads
> 
> This is what I envision the generic thread call looks like, similar to a 
> function except it has a unique ID and it cannot use globals or data in the 
> stack. Everything it is going to use has to be passed into it as a parameter. 
> 
> thread myThreadFunction requiredThreadIdParameter, optionalThreadParameter1, 
> optionalThreadParameter2, etc.
>  set threadStatus = "started" -- allow the thread to communicate while it is 
> working
>  do stuff
>  call functions in the stack that do not have globals nor use data stored in 
> the stack
>  send to commands to objects in the stack that do not have globals nor use 
> data stored in the stack
>  no reads or writes from any field or button data stored in the stack 
>  set threadStatus = "almost done"
>  OK to get or write stuff from/to external things like URLs or serial ports 
> or files
>  package up a result
>  return allTheResults
>  -- after the return the status goes to "complete"
> end thread
> 
> The way I see it, thread is like a function. You give it a unique ID 
> (requiredThreadIdParameter) and then call it with the parameters you want it 
> to have. What would happen next is Livecode would execute the scripts using 
> the scripts in the stacks that are marked as thread safe using the data 
> provided as parameters. 
> 
> The other part to this is the threadStatus function. In the above example the 
> code just looks for the status to be complete but since the thread can set 
> threadStatus, the main program can watch it's progress.
> 
> I guess my final thread request would be a way to kill a thread that has gone 
> rogue. For example, perhaps a function like 
> killThread(requiredThreadIdParameter)
> 
> As I see it, each function or command (or thread) in a script would get a 
> marker declaring it thread safe or not. A thread could only call thread safe 
> code. If the code had a global in it, not thread safe. if the code looked in 
> a field, not thread safe.
> 
> Anyway that's my two cents on multithreading if I ruled the Livecode world. 
> Seems like it would be easy enough to implement in the existing code base but 
> still quite powerful.
> 
> I do something similar to this with URLs. A stack running as a HTTP server / 
> cgi gets hit and it doles out a bunch of URL requests to various other 
> servers. All those servers work in parallel and when they are done and the 
> urlStatus for each request is "cached", I grab the results and return a 
> summary to the client.
> 
> Kee Nethery
> not holding my breath.
> 
> 
> _______________________________________________
> use-livecode mailing list
> use-livecode@lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription 
> preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode


_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Reply via email to