CWinThread killen
-
Wie kann ich ein Thread das mit AfxBeginThread() gestartet wurde, killen? In MSDN steht AfxEndThread(), aber wie kann ich diese Funktion aufrufen wenn ich z.B. auf ein Button klicke. Die Funktion muss ja innerhalb des Threads aufgerufen werden. Thnx im Voraus
-
siehe hier: http://www.henkessoft.de/mfc_einsteigerbuch_kapitel17.htm
class CThread001Dlg : public CDialog { // Konstruktion public: static UINT thrFunction (LPVOID pParam); CThread001Dlg(CWnd* pParent = NULL); // Standard-Konstruktor ... ... private: int m_Flag; } //... void CThread001Dlg::OnButtonStart() { m_Flag = 1; CWinThread* pThread = AfxBeginThread (thrFunction, &m_Flag); } void CThread001Dlg::OnButtonStop() { m_Flag = 0; } UINT CThread001Dlg::thrFunction(LPVOID pParam) { int* pFlag = (int*) pParam; while (*pFlag) { // thread action ... } return 0; }[ Dieser Beitrag wurde am 18.05.2003 um 02:02 Uhr von Erhard Henkes editiert. ]
-
Hi,
leider funktioniert es nicht. Ich habe mehrere Pointer in meiner Funktion die nicht gelöscht werden, oder das Programm stürtzt einfach ab.
Ich habe es so geschafft:UpdateData(); HANDLE hThread = m_pThread->m_hThread; TerminateThread(hThread,NULL);ist es empfehlenswert TerminateThread() zu verwenden oder eher nicht?
-
eher nicht
-
Aha, und warum?
-
ho,
Guck in die MSDN. Da steht warum die Funktion "dangerous" ist.
-
Schau mal in meinem Kapitel, da ist noch eine komplexere Methode unter Umgehung der statischen Funktion. UpdateData(...) ist leider auch nicht thread-sicher.
-
Danke euch allen!