Probleme mit CreateEvent



  • Ich möchte gern mit CreateEvent arbeiten, da ich Funbktionen habe die auf ein Ereigniss warten müssen. Nur ist mir noch nicht klar wie CreateEvent funktioniert.
    z.B. möchte ich mir eine eine connect Funktion schreiben. Aber erst wenn die Verbindung steht soll es weiter gehen. ich dacht an
    HANDLE hEvent;

    int connect()
    {
    hEvent = CreateEvent(NULL, FALSE, FALSE , TRUE);
    SetEvent(hEvent); 
    
    .//hier soll versucht werden zu verbinden
    .
    .
    WaitForSingleObject(hEvent, 3000);//auf was aber wartet er hier????
    ResetEvent(hEvent);
    CloseHandle(h_Event1);
    }
    

    Es geht hier um eine Verbindung über Windows Sockets.
    Auf was wartet WaitForSingleObject?

    }



  • bigborre schrieb:

    Auf was wartet WaitForSingleObject?

    Da du auf ein Eventhandle wartest: Auf den Aufruf von SetEvent. Deswegen ist es wenig sinnvoll, das im selben Thread (oder gar in derselben Funktion) zu machen.



  • Hmm, ich kapier das noch nicht ganz, angenommen ich will warten bis die verbindung steht. Dann soll es weiter gehen, wo muss das SetEvent hin????

    So?

    if(connect==TRUE)
    {
    SetEvent(hEvent);
    }
    

    ??



  • Warten kann in diesem Fall nur ein anderer Thread. Die Funktion, die du da hast, braucht nicht zu warten, denn sie ist ja sowieso mit dem Verbindungsaufbau beschäftigt (wenn ich das richtig deute - den Inhalt der Funktion hast du ja nicht gezeigt).



  • Also es geht darum ich habe ein Projekt, das soll erst eine Verbindung aufbauen, dann Daten senden und empfangen, jetzt möchte ich eine Rückmeldung wenn die Verbindung erstellt worden ist, .. wenn die Daten gesendet worden sind und und und.

    Ich kenne das aus Basic,

    Public event und
    Raise Event
    

    Jetzt wollte ich das in mein C++ Prog ähnlich einbauen.

    EDIT: angenommen bei connect ist es sinnlos dann bei send
    ich möchte Daten senden und dann warten bis die Antwort da ist bevor ich wieder Daten sende. Da müßte es doch gehen.



  • Warten (im Sinne von Events und WFSO) ist überhaupt nur sinnvoll, wenn du mehrere Threads hast. Welche Threads hast du und was sind deren Aufgaben?



  • Ok, das ist doch schon mal eine gute Aussage.
    Ein thread für´s Verbinden,damit nicht gesendet wird bevor verbunden ist
    einer für´s senden, damit immer nur gesendet werden kann wenn die Antwort des vorherigen sendens da ist.



  • Und einen Thread, der sich um's UI kümmert, hast du doch wohl auch, oder? Startest du für jeden Sendevorgang den Thread neu? Wie löst du den Sendevorgang aus? Mit einem Button?



  • Wenn du ein "connected"-Event-Handle willst, dann solltest du es mit ManualReset erstellen (2. Parameter von CreateEvent). Den 4. Parameter solltest du dir auch nochmal anschauen 😉

    Du musst aber zuerst einmal überlegen, wie du in den anderen Thread an dein EventHandle kommen willst (z.B. über OpenEvent). Dann kannst du in connect mit SetEvent das Event setzen. WaitForSingleObject brauchst du aber imho in dieser Funktion nicht.

    Beachte auch, dass du mit CloseHandle (zumindest so wie du es hast), dein Event gleich wieder zerstörst:

    Use the CloseHandle function to close the handle. The system closes the handle automatically when the process terminates. The event object is destroyed when its last handle has been closed.



  • MFK schrieb:

    Und einen Thread, der sich um's UI kümmert,

    Was meinst du mit UI???

    Ja, der Sendevorgang wird mit einem Button gestartet.(der ruft dann meine send funktion auf)
    Und für jedes send ein Thread.

    @flenders, der vierte Patrameter ist doch für den Namen oder seh ich das falsch



  • bigborre schrieb:

    Was meinst du mit UI???

    Eins reicht. 😉

    UI = User Interface, zu deutsch Benutzerschnittstelle.

    Du hast doch eine Nachrichtenschleife, und die ist vermmutlich weder in dem Verbindungs- noch in dem Sendethread.



  • hmm,
    ich weiß nicht genau was du meinst, die Funktionen stehen alle in einer DLL die dann von einer Benutzeranwendung aufgerufen werden.
    Was meinst du mit:

    MFK schrieb:

    Eins reicht. 😉

    P.S. ich hab noch nicht soviel mit Threads gemacht, weiß deshalb auch nicht wo ich einen brauche und wo nicht. 😕



  • Ein Fragezeichen!!!!!!!!!!!



  • Ein Ausrufezeichen reicht aber auch! 😞


Anmelden zum Antworten