LINUX.ORG.RU

История изменений

Исправление m0rph, (текущая версия) :

Используй std::thread и атомарную переменную (например std::atomic_flag) в качестве признака выхода из цикла.

std::thread workerThread;
std::atomic_flag exitFlag;
exitFlag.test_and_set();

workerThread = std::thread(threadProc);

void threadProc()
{
    while(exitFlag.test_and_set()) {
        // Do something
    }
}

Когда захочешь завершить поток, просто установи этот флаг:
exitFlag.clear();
if(workerThread.joinable())
    workerThread.join();

Исходная версия m0rph, :

Используй std::thread и атомарную переменную (например std::atomic_flag) в качестве признака выхода из цикла.

std::thread workerThread;
std::atomic_flag exitFlag;
exitFlag.test_and_set();

workerThread = std::thread(threadProc);

void threadProc()
{
    while(exitFlag.test_and_set()) {
        // Do something
    }
}

Когда захочешь завершить поток, просто установи этот флаг:
exitFlag.clear();
if(workerThread.joinable())
    workerThread.join();