Threads richtig öffnen und schliessen



  • also das m_ports in deiner dialog2 klasse ist das das gleiche objekt das im hauptfenster verwendet wird? oder sind zwei unterschiedliche?



  • es existiert einmal im
    Hauptdialog und einmal im Dialog 2

    Die Thread Klasse habe jeweils in beide Klassen des Dialogs importiert und in der Klasse des jeweiligen Dialogs ein Objekt erzeugt.



  • ok wenn das wirklich so ist, dann versteh ich das problem nicht mehr, weil dann beide threads voneinander unabhängig sind.

    sind aber schon worker threads oder?



  • worker threads ?

    ja aber kann es daran liegen das jeweils beide threads einen zugriff auf denn ComPort machen, diesen intialisieren und schliessen ? Jedoch müsste eigentlich nichts passieren dar ich ja mit

    m_Port[0].stopMonitoring();

    denn Thread ja stoppe und auch denn handel zum ComPort schliesse. Deshalb darf hier doch kein Problem entstehen. Ausserdem wenn beid Threads startbereit sind funktioniert der 2.te Thread nur wenn ich im Debug modus bin. Schliese ich denn Dialog 2 dann bekomme ich ich eine Fehlermeldung an der stelle bei der Methode stopMonotoring() ... m->SuspendThread() manchmal auch über ComPort1.

    Kann es sein das ich evtl. eine warteschleife brauche bevor ich denn einen Thread schliesse und denn anderen starte, damit genug zeit für das schliessen und öffnen des comports gewährleistet ist ?? Wenn ja wie mache ich das ??

    Mann ich bin am Arsch... 😮



  • es gibt methoden die darauf schauen ob die threads wirklich beendet wurden

    und wie ich ja schon gesagt habe, darst du nicht nur suspendthread machen
    sonder du musst AFXENDTHREAD aufrufen, das gegenstück zum afxbeginthread()

    ich denke mal schon das du einen worker thread gebaut hast 🙂

    beim schließen deines dialoges solltest du auf alle fälle den AfxEndThread aufrufen. sonst hängt der doch immer noch in der prozessschleife



  • void AFXAPI AfxEndThread(
    UINT nExitCode,
    BOOL bDelete = TRUE
    );

    Parameters
    nExitCode
    Specifies the exit code of the thread.

    hmm... kann ja mal probieren jedoch wie bekomme ich denn nExitCode damit AfxEndThread auch mitbekommt welcher thread es ist ? In der CWinThread klasse habe ich nichts gefunden welches mir den ExitCode eines Threads zurückliefert.

    gruss
    Indian



  • Call this function to terminate the currently executing thread.

    du musst das nur aufrufen,den exit code bekommst du ja um zu wissen ob es gut ging.



  • du musst kein exit code angeben, den bekommst du zurück.
    musst mal in der msdn gucken was für was steht

    0 ist glaub ich succeeded



  • AfxEndThread(UINT nExitCode,BOOL bDelete = TRUE);

    laut definition siehe oben verlangt AfxEndThread UINT nExitCode :p

    hier der Beweis

    c:\Dokumente und Einstellungen\Administrator\Eigene Dateien\Visual Studio Projects\Kasse\Kasse\SerialPort.cpp(488): error C2660: 'AfxEndThread' : function does not take 0 parameters
    

    ausserdem wird AfxEndThread nicht innerhalb des Threads aufgerufen ??? Ich hab doch keinen Zugriff auf dem Thread. Ich will ihn doch von aussen schliessen d.h. wenn ich F8 drücke jedoch ist der Thread ja ne Endschlossschleife welcher in von einer anderen Klasse eingebunden wurde der nur denn ComPort überwacht. Mit AfxEndThread würde der Thread nur einmal fragen ob was am ComPort anliegt. Was hab ich dann davon AfxEndThread aufzurufen welcher doch den ExitCode verlangt. Bekomme immer ne Fehlermeldung.



  • natürlich musst die variable mitgeben, das das eine output variable ist.
    ist doch logisch 😃



  • AfxEndThread bringt nichts .. man kann es nur innerhalb des Threads aufrufen. Macht leider null sinn 😞



  • finde einfach kein Beispiel wie ich AfxEndThread verwenden kann.

    Ob es in dem Fall überhaupt auch interessant ist ? Kann es ja nur innerhalb aufrufen.

    Mist glaub nicht das ich es irgendwann noch löse.. Ich lauf amok



  • les das mal Multithreading: Terminating Threads

    in der msdn


Anmelden zum Antworten