MFC多线程安全退出:判断所有线程是否已退出
要判断所有线程是否都退出,可以使用一个计数器来记录当前活动的线程数量。每当一个线程退出时,计数器减一,当计数器为0时,说明所有线程都已退出。
为了实现线程安全退出,可以使用互斥锁来保护共享资源,确保只有一个线程可以修改计数器的值。
下面是一个简单的示例代码,使用C++的MFC库实现:
#include <afxmt.h> // 包含MFC的互斥锁类
// 全局变量
int g_threadCount = 0; // 计数器
CMutex g_mutex; // 互斥锁
// 线程函数
UINT MyThreadFunction(LPVOID pParam)
{
// 线程开始时,计数器加一
g_mutex.Lock(); // 加锁
g_threadCount++;
g_mutex.Unlock(); // 解锁
// 线程的具体逻辑
// 线程结束时,计数器减一
g_mutex.Lock(); // 加锁
g_threadCount--;
g_mutex.Unlock(); // 解锁
return 0;
}
int main()
{
// 创建多个线程
const int threadCount = 5;
CWinThread* threads[threadCount];
for (int i = 0; i < threadCount; i++)
{
threads[i] = AfxBeginThread(MyThreadFunction, nullptr);
}
// 等待所有线程退出
while (true)
{
g_mutex.Lock(); // 加锁
if (g_threadCount == 0)
{
g_mutex.Unlock(); // 解锁
break;
}
g_mutex.Unlock(); // 解锁
// 等待一段时间后再次检查
Sleep(100);
}
// 线程全部退出后的后续操作
return 0;
}
在上面的代码中,通过互斥锁保护计数器的访问,确保只有一个线程在修改计数器的值。在每个线程的开始和结束时,分别加锁和解锁,保证计数器的安全操作。在主线程中,通过循环等待计数器归零,即所有线程都退出后再继续执行后续操作。
原文地址: https://www.cveoy.top/t/topic/qCBW 著作权归作者所有。请勿转载和采集!