Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;11“;“正确”;拖延执行的方式_C++_C++11_Scheduler - Fatal编程技术网

C++ C++;11“;“正确”;拖延执行的方式

C++ C++;11“;“正确”;拖延执行的方式,c++,c++11,scheduler,C++,C++11,Scheduler,在C++11中,这是一种“干净”的延迟执行方式吗?还是有“更干净”的方法 #包括 #包括 int main(int argc,char*argv[]){ boost::thread t([](){boost::this_thread::sleep(boost::posix_time::Millimes(1000));std::cout理想情况下,如果作业很短,您应该使用基于事件的系统,在该系统中,您可以插入具有特定时间延迟的作业,然后执行它们。实际上不需要线程,您可以在主线程中完成所有操作 您的

在C++11中,这是一种“干净”的延迟执行方式吗?还是有“更干净”的方法

#包括
#包括
int main(int argc,char*argv[]){

boost::thread t([](){boost::this_thread::sleep(boost::posix_time::Millimes(1000));std::cout理想情况下,如果作业很短,您应该使用基于事件的系统,在该系统中,您可以插入具有特定时间延迟的作业,然后执行它们。实际上不需要线程,您可以在主线程中完成所有操作

您的主循环看起来有点像这样:

int main() {
    setup();

    while (true) {
        handleEvents();
        doYourOwnStuff();
        usleep(nextEvent.firingTime - currentTime); // Wait until the next event is triggered
    }
}

当然,如果你已经有了一个系统,那么这样的系统就不容易实现。许多流行的UI框架(Cocoa、Qt、Windows)都支持这种设计,因为它非常强大和简单。

问题是w。这种方法是我希望“操作”只在(大致)处执行X时间量。while循环方法需要我睡眠()并“每隔一段时间”醒来,并检查是否有足够的时间来执行我的“操作”。或者,如果我错了,请纠正我,因为你知道下一个事件将在何时发生,你可以一直睡到它发生。为什么
usleep
?事件调度程序不应该在下一个事件准备好之前阻止?这允许你立即响应新的IO事件。我使用usleep是因为它非常准确速率,我的示例将等待下一个事件准备就绪。当然,更好的方法是使用线程间消息传递,但对于这个简单的示例来说,代码太多了。有
std::async
,但是要注意启动策略…您应该能够在主线程中调用boost::this_thread::sleep,而不创建新线程
int main() {
    setup();

    while (true) {
        handleEvents();
        doYourOwnStuff();
        usleep(nextEvent.firingTime - currentTime); // Wait until the next event is triggered
    }
}