Wird auch so gemacht. Wenn eine Weile lang (500 ms) nichts empfangen wird, geht der Thread in einen langsamen Modus, schläft also mehr oder weniger nur und wacht dann auf, wenn wieder viele Daten kommen.
Allerdings habe ich gerade gesehen, dass bereits ein neuer Treiber, welchem man beibringen kann, eine bestimmte Funktion im Programm aufzurufen.
Allerdings verstehe ich noch nicht ganz wie man diese benutzt, deshalb hier ein Paar Zeilen Beschreibung:
int setReceiveCallBack( CANHANDLE h, LPFNDLL_RECEIVE_CALLBACK cbfn )
With this method one can define a function that will receive all incoming messages. Note
that canusb_Read will not work after this call. You can make it work again by calling
this method and set cbfn equal to NULL.
The callback function should be defined as
void fn( CANMsg *pMsg );
Note: that the channel has to be open to be able to set a callback function.
---
Ich definiere nun also eine Methode, welcher ein Pointer auf CANMsg übergeben werden kann:
procedure OnReceiveMessage(var MsgBuf: CANMsg);
Dann eine Funtion, mit welcher ich der Treiber
DLL angeben kann, welche Methode in meinem Programm sie aufrufen solle:
function canusb_setReceiveCallBack(h: DWord; LPFNDLL_RECEIVE_CALLBACK: Pointer) : CANUSB_Result; stdcall ; External 'canusbdrv.dll' name 'canusb_setReceiveCallBack';
Hier bin ich mir schon nicht mehr sicher, ob dieses LPFNDLL_RECEIVE_CALLBACK nun ein Pointer oder was auch immer sein soll, werde es wohl oder übel noch irgendwie herausfinden müssen...ausser es sagt jemand, dass das ganz einfach sei und mir sogar noch ein Paar Tipps liefert -.-