FileCreate "OVERLAPPED" (war Thread aber wie)



  • Hallo,

    ich möchte ein Thread Objekt mit dem Builder erstellen.

    Dem Thread soll nun über eine Funktion eine Botschaft mitgeteilt werden was
    genau im Thread gemacht werden soll sowie ein Zeiger auf einen Buffer in den
    z.B Daten die über die RS232 Schnittstelle emfangen wurden geschrieben werden. Ist die Anforderung erledigt soll der
    Thread dem Hauptprogramm dieses mitteilen und ein Ergebniss zurückliefern
    (bool sowie int sowie die Anforderungskennung).
    Keine Ahnung wie ich soetwas anstellen soll.
    Habe auch schon unter FAQ nachgeschaut.



  • hi!

    für dein problem ist genau die overlapped struktur da;-)
    siehe da:
    http://www.c-plusplus.net/forum/viewtopic.php?t=46318&highlight=overlapped

    im prinzip arbeitest du dann mit events...dh wenn du mit readfile etwas von der seriellen lesen willst, blockiert die readfile function nicht solange bis daten da sind, sondern das event das du bei der overlapped struktur angibst, reagiert...

    cu



  • Danke für den Hinweis, werde mir das mit dem Overlapped mal genauer ansehen.



  • Hallo,

    noch einmal zu OVERLAPPED, je mehr ich dazu auf der Microsofthomepage
    lese je mehr verwirrt es.

    OVERLAPPED overlapped;
         HANDLE event;
         overlapped.hEvent = event;          //was stell ich mit dem Handle an?
    
         com_handle = CreateFile("com1",GENERIC_WRITE |   
         GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);
         SetCommMask(com_handle,EV_RXCHAR);
    
         //Hier das lesen von der Schnittstelle hier soll nun ein Event passieren 
         //Daten empfangen oder timeout
         ReadFile(com_handle,data,1,&b,NULL);
    

    Nun gibt es noch die Funktionen :
    WaitCommEvent(com_handle,EV_RXCHAR,lpOverlapped); // lpOverlapped-> Pointer to an OVERLAPPED structure, &overlapped funkt nicht
    handle = CreateEvent(....);

    Ist es möglich, wenn bei ReadFile ein Event passiert z.B. timeout oder
    Daten empfangen, eine Funktion automatish ausgeführt wird (wie ein Interrrupt)?
    Wie stell ich soetwas an?


Anmelden zum Antworten