WaitForSingleObject und WAIT_TIMEOUT
-
hallo,
ich hab ein kleines programm geschrieben um mal threads usw zu verstehen, bin also kein profi und entschuldig mich schon mal im voraus für dumme fragen.in der header datei hab ich ein paar membervariablen definiert.
int m_beep; //für thread while schleife CWinThread* m_ThreadBeep; //Threadvariable static UINT thrFunc_1(LPVOID pParam);
drück ich in meinem dialog den start button wird der thread gestartet (es piept dann jede sekunde)
void CThread1Dlg::OnStart() { // TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen //CWinThread* pThread = AfxBeginThread (thrFunc_1, this); m_beep =1; m_ThreadBeep = AfxBeginThread (thrFunc_1, this); } ///////////////////////////////////////////// //Thread starten UINT CThread1Dlg::thrFunc_1(LPVOID pParam) { CThread1Dlg* pDlg = (CThread1Dlg*) pParam; pDlg->Beep(); return 0; } void CThread1Dlg::Beep() { while(m_beep == 1) { Sleep(1000); MessageBeep(0); } }
ich stoppe den thread wie folgt:
void CThread1Dlg::OnStop() { m_beep =0; }
piepen hört auf, soweit so gut.
jetzt möchte ich, drücke ich auf den "ok" button des dialogs den dialog schliessen, vorher aber überprüfen ob der thread noch läuft.
void CThread1Dlg::OnOK() { if(WAIT_TIMEOUT == WaitForSingleObject(m_ThreadBeep, 5000)) { MessageBox("Fehler Thread nicht beendet","Error", MB_OK); } else { CDialog::OnCancel(); } }
das funktioniert genau nicht. geh ich in den debug modus stelle ich fest das die bedingung in der if überprüfung nicht zutrifft.
wird dort nicht abgefragt ob der thread beendet ist (innerhalb 5 sekunden), und sollte da bei laufendem thread nicht die rückgabe "WAIT_TIMEOUT" sein?
hab ich was mit dem handle dureinander gebracht?
vielen dank schon mal, mach jetzt schon recht lange dran rum
Harald
-
Vielleicht hilft dir das weiter
http://www.c-plusplus.net/forum/viewtopic.php?t=100710Gruß
:: NoName ::
-
danke,
hat nicht direkt geholfen aber doch
hab einWaitForSingleObject(m_ThreadBeep, INFINITE)
eingebaut.
und festgestellt dass das prog. nicht stehen bleibt beim laufenden thread, also muss der handle falsch sein.So funktionierts:
if(WAIT_TIMEOUT == WaitForSingleObject(*m_ThreadBeep, 5000)) { MessageBox("Fehler Thread nicht beendet","Error", MB_OK); }
das "*" for der variablen hat gefehlt,
ich komm immer komplett durcheinander mit den * vor der var oder vornach dem typ oder dem & davor oder dahinter.
trotzdem DANKE!!!!!