C++ “链锁”;火与遗忘”;等待方法
我有一个函数需要等待一定的时间才能继续,或者它的成功运行取决于其他因素,比如布尔标志 我希望链接回调以对操作进行排序,并等待每个操作成功运行 这是我希望它如何工作的一个例子:C++ “链锁”;火与遗忘”;等待方法,c++,c++11,methods,callback,task,C++,C++11,Methods,Callback,Task,我有一个函数需要等待一定的时间才能继续,或者它的成功运行取决于其他因素,比如布尔标志 我希望链接回调以对操作进行排序,并等待每个操作成功运行 这是我希望它如何工作的一个例子: int64_t m_runTime = 0; bool clean = false; void check() { if (time(nullptr) > m_runTime) { return; // not yet } m_runTime = time(nullptr)
int64_t m_runTime = 0;
bool clean = false;
void check() {
if (time(nullptr) > m_runTime) {
return; // not yet
}
m_runTime = time(nullptr) + 10;
// Emit some kind of signal to .then saying that the 'check' has finished?
}
void cleanup() {
// cleanup everything and emit signal
if (!clean) {
return; // not yet
}
[..]
// ok, cleanup finished
}
check().then([]() {
// check() finished, run cleanup
cleanup();
}).then([](){
// cleanup() finished, output a message
std::cout << "all task finished successfully!" << std:endl;
});
int64_t m_runTime=0;
bool clean=false;
无效检查(){
if(时间(nullptr)>m_运行时){
return;//还没有
}
m_运行时=时间(nullptr)+10;
//向…发出某种信号。然后说“检查”已完成?
}
空洞清理(){
//清理一切并发出信号
如果(!清洁){
return;//还没有
}
[..]
//好的,清理完毕
}
检查(),然后([])(){
//check()已完成,请运行清理
清理();
}).然后([])(){
//cleanup()完成,输出一条消息
std::当然,编写自己的最小任务队列非常简单。但是对于多线程应用程序,我绝对建议使用库。标准库中的支持非常基本。也就是说,如果您预先了解链的所有部分,那么没有理由不将它们全部放入sin中将所有函数放在一个函数中,并将其放在一个线程上。@MikeMB“将所有函数放在一个函数中,并将其放在一个线程上”你能在这里更具体一点吗?它是如何工作的?当然,如果你更具体地说明check应该如何工作。目前,check没有返回任何东西,因此调用。那么肯定不起作用,即使std::future::then
已经标准化了它。如果能够使用future的那么方法,我很可能会在准备就绪时发出信号。好吧,编写自己的最小任务队列非常简单。但对于多线程应用程序,我绝对建议使用库。标准库中的支持非常基本。也就是说,如果您预先了解链的所有部分,那么没有理由,为什么不应该将它们全部放在一个函数中并将其放在一个线程上。@MikeMB“将它们全部放在一个函数中并将其放在一个线程上”你能在这里更具体一点吗?它是如何工作的?当然,如果你更具体地说明check应该如何工作。目前,check没有返回任何东西,因此调用。那么肯定不起作用,即使std::future::then
已经标准化了它。如果能够使用future的那么方法,我很可能会在准备就绪时发出信号。