On Tue, 15 Feb 2011 00:49:56 +0000, Paulo Costa <[email protected]> wrote:
>Synaser is blocking both for writing and reading. >The SdpoSerial component creates a thread to listen and generates an >event when bytes are received. So reading can be non-blocking. >The write methods are direct calls to the Synaser ones and they are >blocking. I just checked by setting up a transfer of 100.000 bytes at 38400 baud. With a breakpoint at the FComm.WriteData method I could time this function using the step-over command. It returned in 30 s when the packet was 100006 bytes long, an effective baudrate of 33300 baud. So it really looks like the WriteData *is* blocking... >For that, you must break your transmission in small block and use the >completion of each transfer to signal the progress. Sadly this seems to be the case... I would have to send in chunks of 1500 bytes or so to get 2 progress ticks per second. The application will probably be stone dead and nonresponsive too, which is one of the things I really like to *always* avoid. What one would need to do to fix this is to put the SdpoSerial into a thread and let the thread send data out from a buffer that can be loaded by the main application. But then we have the problem of transferring the Tx data into the thread environment in a threadsafe way... My project just grew. :-( Bo Berglund -- _______________________________________________ Lazarus mailing list [email protected] http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
