在我的项目中,我具有以下定义的功能:
void start(std::chrono::milliseconds delay) override
{
mDelay = delay;
if(mThread == nullptr)
{
mThread = std::make_unique<Thread>([&]()
{
sleep(std::chrono::milliseconds(mDelay));
});
}
}
当我第一次调用该方法时,将创建线程并在mDelay周期内进入睡眠状态。但是我需要再次更改mDelay时间,但是更改的时间要比提供的更早。
但是,当我再次调用它时,我无法取消先前的睡眠并使用定义的mDelay开始新的睡眠?
我怎样才能做到这一点?
最佳答案
移动并处置旧线程(来自移动设备,未经测试的代码)。如果线程要触发处理程序,则只需抛出一个被杀死的标志,这样一旦被杀死就不会触发已处置的线程。
if(mThread != nullptr)
{
auto dispose = std::move(mThread);
dispose->detach();
mThread.reset(new Thread([&]()
{
sleep(std::chrono::milliseconds(mDelay));
});
}