[Lazarus] How to PostMessage to object?

Michael Schnell mschnell at lumino.de
Fri Jun 10 09:52:29 CEST 2011


On 06/09/2011 08:00 PM, Krzysztof wrote:
> So, I wrote TMyHTTPClient which is some kind of layer for synapse http 
> client 
AsyncPro is a good example for something like this:

An instance of an APRO Object (that handles either an asynchronous or a 
TCP/IP-Socket based bidirectional stream) internally creates threads 
that are assigned to the blocking in and out API functions of the OS.

Mechanisms like that we have been discussing here, are used to make the 
interface of the object completely un-threaded (and with that 
thread-safe). There are event properties, and the functions defined 
there are called in the context of the main thread when an internal 
worker thread schedules the event. Data is provided to theses event 
handlers in a thread-safe manner.

Multiple requests in this forum and elsewhere suggest that Lazarus would 
benefit a lot from an Async-Pro port or work-alike, being part of the 
packet.

Maybe you can do your project in a way that in a versatile way 
implements the core of this: a class that creates internal "in" and 
"out" threads and provides hooks for attaching a blocking interface of 
any kind of byte-stream to same.

The now bug-free Application.QueueAsyncCall() should be the perfect 
thread-transfer-mechanism.

Only downside: AFAIK, right now it is not possible to create a Lazarus 
Application that has no GUI binding and provides a working 
Application.QueueAsyncCall() and TTimers that would allow you to easily 
react on timeouts in the communication you are monitoring. So you 
supposedly need to do a GTK2, QT, or Windows application.

-Michael




More information about the Lazarus mailing list