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的
那么
方法,我很可能会在准备就绪时发出信号。