06-04-2010 07:31 AM
Hi all,
i have a big problem:
I developed an GPI-driver as single value driver in a DLL. I want to display and store a big amount of data but DIAdem is to slow (or has not enought CPU-time) to process the data, coming from driver.
In the my current DAC-setup i use two input blocks having 19 and 16 channels (all of type double) and receiving measurement values from different datasources, in my case a socket (stl::socket) and a local file (istream).
Each data source is implemented as a worker thread and is buffering and converting (MSB-LSB) the incoming data from socket and file stream. Each input block in my DAC-plan is connected to a particular datasource and a separate clock system. The input blocks receiving the data in "Blockmode" (hardware clock, external clock) by DAC-kernel transfer via InputValueGet methode of the GPI.
For some tests i used some channels to display driver internal information:
-MaxScanNumber from DIAdem in InputValueGet
-Current buffersize of the related worker thread
What I can see is, that the thread buffer size increases very fast, but DIAdem is not beeing get the data with a proper speed. It only wants to have between 200-300 scans at one InputValueGet call.
Additionally I have made some tests using performance monitor from windows. What i can see is, that the two threads beeing created right and DIAdem runs nearly 100% CPU load. All DLL threads beeing stopped correctly after stop of measurement course.
What can I do to increase the DIAdem performance?
Best regards
Jörg.
Solved! Go to Solution.
06-10-2010 10:03 AM
First problem is solved:
A SOCKET in the worker-thread was not in "non-blocking mode" hence the recv(...) call on this was blocking and so DIAdem was always running at 100% CPU-Time in measurement course.