DLL / Daten von der seriellen Schnittstelle lesen



  • Hallo zusammen

    Ich habe eine DLL mit der ich auf die serielle Schnittstelle zugreife. Dabei verwende ich CreateFile, ReadFile, WriteFile und CloseHandle.

    Nun möchte ich aus der DLL heraus die Daten mit ReadFile lesen aber nur dann, wenn Daten empfangen wurden. Ansonsten arbeitet die DLL die Funktion die sie bereitstellt ab.

    Wie kann man das nun anstellen? Löst der PC ein Interrupt aus, auf die die DLL reagieren kann und dann mit ReadFile die Daten lesen kann? Oder geht das gar nicht?

    Gruss
    PeterHans



  • Kann mir jemand Helfen? 😞



  • weiß zwar nich ob das in ner dll auch funktioniert, aber soo viel anders dürfte es ja auch nich sein... 😉

    du kannst, zB. mit
    "SetCommTimeouts" (siehe "COMMTIMEOUTS" struktur)

    einen timeout für ReadFile setzen,
    wenn "Readfile" nach dieser Zeit kein Zeichen gelesen hat, dann kehrt ReadFile mit 0 gelesen bytes zurück...

    du kannst natürlich auch mit WaitCommEvent (wartet aber bei CreateFile ohne "FILE_FLAG_OVERLAPPED" ewig) auf ein zeichen der schnittstelle warten und dann die neuen zeichen mit ReadFile abholen...
    (wenn du "gleichzeitig" lesen und schreiben willst, oder WaitCommEvent mit timeout brauchst, mußt du den port mit FILE_FLAG_OVERLAPPED öffnen)

    schau dir das mal an,
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-110820-and-highlight-is-waitcommevent.html
    oder gib bei der forumsuche mal "WaitCommEvent" ein,
    da findest du ne menge zu dem thema ^^

    mfg



  • Hallo,

    Es gibt noch eine Möglichkeit:

    Mit SetCommTimeouts() das Timeout fürs lesen auf unendlich setzen (blockierend), und den Aufruf von ReadFile() in einen eigenen Thread auslagern.
    Der kann dann zB. in einen Ringbuffer schreiben und sich mit dem Mainthread zB. mittels Semaphore synchronisieren.
    Der Code zur Erzeugung des Threads kann natürlich in der DLL verborgen werden.

    mfg
    ++chris


Anmelden zum Antworten