要判断所有线程是否都退出,可以使用一个计数器来记录当前活动的线程数量。每当一个线程退出时,计数器减一,当计数器为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;
}

在上面的代码中,通过互斥锁保护计数器的访问,确保只有一个线程在修改计数器的值。在每个线程的开始和结束时,分别加锁和解锁,保证计数器的安全操作。在主线程中,通过循环等待计数器归零,即所有线程都退出后再继续执行后续操作。

MFC多线程安全退出:判断所有线程是否已退出

原文地址: https://www.cveoy.top/t/topic/qCBW 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录