On 10/04/2011 12:53 PM, Frank Church wrote:

I am looking at Application.QueueAsyncCall and the only parameter it takes in addition to the method pointer is a PrtInt. That seems to limit the options passed compared with TThread.Synchronize. Can the PtrInt be cast to a pointer to a richer data structure?

TThread.Synchronize allows for no parameter at all. So QueueAsyncCall is less limited.

The parameter of course can be a pointer to a record or an object that might hold any information.

But you need to be aware that, while the pointer itself is "safe" (i.e. it does not change when arriving at the main thread even if the sending thread changes the value of the variable it gave to QueueAsyncCall), this of course is not true for the information the pointer points to. Here you might need to create a copy (by "New()" or ".Create") if the threads goes on writing to the original and you need to see a consistent object in the main thread. (beware of Strings doing reference counting here!)

"Synchronize" stalls the thread while doing the AsyncCall, so this problem does not arise.

-Michael

--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to