我在纯c ++ 11中写作并希望做一个简单的等待x秒并打开一个成员变量'关掉之后。此示例中类的成员变量是动画'。
的标志 cout << "stop animating!" << endl;
this->animating = false;
async(launch::async, [this] ()
{
this_thread::sleep_for(chrono::seconds{8});
this->animating = true;
std::cout << "start animating!" << std::endl;
});
cout << "i'm here" << endl;
this_thread :: sleep_for 会阻止整个程序继续运行(即使它位于异步线程内)。因为我没有看到&#34;我在这里&#34; 8秒后如果上面的代码按预期工作,我会看到&#34;我在这里&#34;紧接着#34;停止制作动画&#34;。这种阻塞对我来说是一个问题,因为它会锁定我关心的所有内容,例如继续处理&#39;输入&#39;像键盘事件一样,程序也会停止绘制&#39;屏幕上的其他对象。
有没有人知道如何使用标准c ++ 11实现成员变量的简单延迟和异步更改(没有像boost这样的框架)
iOS中的非常简单:
// Delay execution of my block for 10 seconds.
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 10 * NSEC_PER_SEC),
dispatch_get_main_queue(), ^
{
//do whatever, 10 seconds later
});
答案 0 :(得分:3)
根据@ user2176127的评论 - 您试过这个吗? :
cout << "stop animating!" << endl;
this->animating = false;
std::thread delay_thread(
[this]() {
this_thread::sleep_for(chrono::seconds{8});
this->animating = true;
std::cout << "start animating!" << std::endl;
}
);
delay_thread.detach();
std::cout << "I'm here" << std::endl;
另请注意,您可能需要将animating
成员包裹在std::atomic<>
中,即如果它是bool
它现在变为std::atomic<bool>
,以确保您的主要成员线程会在实际发生时通知更改。 (使用volatile
无法帮助。)