в любом случае останов "не мгновенный"
мгновенная остановка и не нужна.
Проще и лучше использовать QSemaphore который для этого и предназначен.
А QWaitCondition может быть использован для этой задачи? Думал в начале ипользовать его вместе с мьютексом, но побыстрому сделать не вышло, поток засыпал намертво. Пытаясь разобраться, убрал QWaitCondition, оставил мьютекс. В итоге всё работает.
Сделал так.
C++ (Qt)
...
volatile bool is_waiting;
void wake()
{
if(!is_waiting)
return;
pause_mutex.unlock();
is_waiting = false;
}
void pause()
{
if(is_waiting)
return;
bool locked = pause_mutex.tryLock();
Q_ASSERT(locked);
is_waiting = true;
}
void run()
{
is_waiting=false;
...
if(is_waiting)
{
pauseMutex.lock();
pauseMutex.unlock();
}
...
}
...