C 14中的乘数交叉线程通信
Multiplatform cross thread communication in C++14
我有C 14程序,该程序使用线程从大文件加载数据。我使用std::thread
,在方法中,加载数据。但是,加载数据后,我需要通知主线程(GUI,Console ...(,该数据已准备就绪。我该如何实现?
我找到了此https://www.codeproject.com/articles/16726/cross-thread-calls-intagity-c,但仅是窗口。在Linux上,我可以使用信号和间隔,但我认为这不是一个好主意。
是否有任何C 14机制,可以让您在threadID上进行调用方法xy,并且OS会安排它?
答案: promise
和 future
。
创建std::thread
时,创建一个std::promise
对象,然后将其传递到线程。例如:
std::promise<void> promise_that_data_is_loaded;
auto loaded_future = promise_that_data_is_loaded.get_future();
std::thread t([&promise_that_data_is_loaded]()
{
loadData();
promise_that_data_is_loaded.set(); //set this after work is done
});
while(loaded_future.wait_for(std::chrono::seconds(0)) != std::future_status::ready)
{
//wait, or refresh GUI, or do other stuff, etc...
}
loaded_future.get();
t.join();
注意:我没有编译。这是我头顶的。
在此示例中,您会看到您通过一个承诺,即当set()
时,会告诉另一个线程。
创建线程时,请通过应设置的承诺传递数据/类,然后在完成后将其设置。完成后,这会告诉您的GUI。
相关文章:
- C++一个线程如何正确通信其任务已完成?
- 通过插槽和信号在不同线程中的两个qt对象之间进行通信
- 线程之间的通信不起作用 - C++
- 关于套接字通信的线程
- ZeroMQ:如何使用inproc减少多线程通信延迟
- 用于线程间通信的 Windows 套接字
- 与处理 ZeroMQ 的永久线程与 Qt 通信
- 与非主线程的 GUI 线程通信
- 使用 C++14 和 GLib (GDBus) 的线程通信
- 使用Protobuf进行线程通信
- C 14中的乘数交叉线程通信
- 使用PTHREDS与C 进行线程通信
- Qt中的多线程通信
- 与OpenSSL的多线程通信
- Qt多线程通信
- std::线程通信问题
- Boost:是否存在用于仅线程通信的进程间消息队列机制
- 工作线程如何与主 UI 线程通信
- libuv线程通信
- c++是否有一种方法可以有效地与线程通信而不中断他的工作