Threads richtig öffnen und schliessen
-
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 steht0 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 parametersausserdem 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