gpt4 book ai didi

c++ - 在 C++ 中的主线程中安排工作作业并接收回调

转载 作者:行者123 更新时间:2023-11-30 05:47:17 25 4
gpt4 key购买 nike

在我当前的代码中,我有一个解决方案允许主线程安排一些作业在工作线程中异步执行。

当工作线程完成时,应该使用提供的回调函数通知主线程。主要问题是我希望这个回调在主线程而不是工作线程中执行,所以在完成工作后从工作线程调用简单的函数不是一个选项(回调执行一些可能非常复杂的应用程序逻辑并且我不希望工作线程忙于此)。

我有一个针对该问题的遗留解决方案(使用事件向主线程发出作业已完成的信号等),但我正在寻找一些通用且可重用的解决方案 - C++ 中有什么我可以使用的吗?

理想情况下,我正在寻找像 boost::signals 这样的解决方案,但据我所知,它不是线程感知的。有什么想法吗?

编辑:最终解决方案必须在 linux 上运行并使用 GCC 编译

EDIT2:添加了一些示例代码

回调的典型用法可能如下所示(这不会编译,但我想保持简单以展示一般想法):

///////// main thread ////////////

void fun() { /* work to be done in worker thread */ }

void callback() { /* callback that will be called when fun() is done */ }

int main() {
Worker worker;
worker.doAsync(fun, callback);
// waiting for the worker to finish the job
}

////// worker thread code ///////

/// main worker loop
void Worker::run() {
// wait until the task is scheduled

// run the scheduled tasks
fun();
// when task was finished, call the callback
callback();
}

上面代码的问题是 callback() 函数将从工作线程调用 - 我想要的是让工作线程向主线程发出工作完成的信号,主线程现在应该调用回调因为工作完成了。

最佳答案

如果你会使用 C++11,你可以看看 std::future 类。无论如何,您需要以某种方式在主线程中等待事件。

std::future<T> f = std::async(std::launch::async, <your_thread_func>);
// do something else
f.wait();
T t = f.get();

关于c++ - 在 C++ 中的主线程中安排工作作业并接收回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28629182/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com