सबसे पहले आप एक तरह से धागा शुरू करने के लिए जब यह finished है, तो MFC धागा वस्तु को नहीं हटाता है, MFC धागा के लिए डिफ़ॉल्ट सेटिंग में ही नष्ट करने के लिए ताकि आप उस बंद करने के लिए चाहते हैं।
m_thread = AfxBeginThread(ThreadProc, this, THREAD_PRIORITY_NORMAL ,CREATE_SUSPENDED);
m_thread->m_bAutoDelete = FALSE;
m_thread->ResumeThread();
अब धागे में, आप एक तंत्र चाहते हैं कि कॉलर थ्रेड इसे स्वयं समाप्त करने के लिए एक संकेत भेज सके। कई तरीकों से हैं, सिग्नल की स्थिति की जांच करने के लिए WaitForSingleObject
है या किसी अन्य तरीके से यह थ्रेड केवल एक संदेश भेजने के लिए है। यह बल्कि इसे मारने के लिए सुंदर अंत है।
जबकि यह धागा स्वयं समाप्त हो रहा है (= थ्रेड फ़ंक्शन से बाहर निकलना, सफाई करना), आप मुख्य धागे को बाहर निकलने से पहले इसे पूरा करने के लिए प्रतीक्षा कर सकते हैं।
int wait = 2000 // seconds (I am waiting for 2 seconds for worker to finish)
int dwRes = WaitForSingleObject(m_thread->m_hThread, wait);
switch (dwRes)
{
case WAIT_OBJECT_0:
TRACE(_T("worker thread just finished")); break;
case WAIT_TIMEOUT:
TRACE(_T("timed out, worker thread is still busy")); break;
}
नोट की स्थापना m_bAutoDelete = FALSE
ऊपर बना यह संभव हम अभी भी एक वैध संभाल जब धागा खत्म तो हम उस पर इंतजार कर सकते हैं। आखिरी चीज जो आप करना चाहते हैं वह अपनी स्मृति को मुक्त करने के लिए CWinThread ऑब्जेक्ट को हटा देती है (क्योंकि हमने ऐसा करने की ज़िम्मेदारी ली है)।