On 09/15/2014 02:19 PM, Xiangrong Fang wrote:
2014-09-15 17:23 GMT+08:00 Michael Schnell <mschn...@lumino.de
<mailto:mschn...@lumino.de>>:
In that case I definitely would use Application.QueuAsyncCall.
If I understand correct, from this page:
http://wiki.freepascal.org/Asynchronous_Calls
QueueAsyncCall is, like what its name suggest, doing this in
asynchronous favor -- it execute queued method in the next message
loop (while Application.ProcessMessages takes place, right?).
That is exactly what Postmessage does (in combination with procedure ...
message).
In fact you don't need to call Application.ProcessMessages (on that
behalf). In fact (usually) the main thread is not supposed to do long
lasting or even polling loops to be made of run-to-completion events.
QueueAsyncCall just schedules another run-to-completion event for you
and same will automatically happen as soon as the main thread is free
(having done all previously scheduled events).
But what I need PostMessage for is to notify main thread (or another
thread) that a worker thread finished its job, so that the thread
manager can start a new thread to do the remaining work.
Neither QueueAsyncCall nor Postmessage have anything to do with
finishing a thread (unless you call it right before the end of the
thread's execute procedure).
Anyway, is PostMessage considered "deprecated" or "shall be used on
windows only"?
Not really depreciated but IMHO (when used for thread to main thread
signaling) it's a relict from Delphi's widows-only heritage.
Is there a better way to do what I want?
As said: you can do Application.QueueAsyncCall() right before the end of
the thread's execute procedure;
(Or you can simply start the new worker thread there instead of having
the main thread do this if this might be appropriate.)
-Michael
--
_______________________________________________
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus