C++ 如何使用 std::promise 与可连接线程通信?
C++ How to communicate with a joinable thread using std::promise?
我很困惑如何实现线程间通信std::promise
。
这是一个小例子。当我尝试编译它时,出现错误“get is not member of std::promise”。
#include <iostream>
#include <thread>
#include <future>
void printer_function(std::promise<int>* the_promise)
{
// this function should wait for the promise / future ?????
int the_value = the_promise->get();
std::cout << the_value << std::endl;
return; // will be .join()'ed
}
void worker_function()
{
std::promise<int> the_promise;
std::future<int> the_future = the_promise.get_future();
std::thread t(printer_function, &the_promise);
int the_value = 10;
// somehow set the value of the promise / future and trigger a notification to printer_function ?
the_promise.set_value(the_value); // ?????
t.join(); // join printer_function here
}
int main(int argc, char** argv)
{
std::thread t(worker_function);
t.join();
return 0;
}
您混淆了 std::future
和 std::promise
的角色。
std::future<T>
是尚未存在的 T
结果的占位符。它生成 std::promise<T>
应放置承诺结果的对象。
在您的例子中,打印机函数是结果的接收者 - 使用 std::future
。
worker 函数负责生成结果 - 使用 std::promise
.
#include <iostream>
#include <thread>
#include <future>
void printer_function(std::future<int> result)
{
int the_value = result.get();
std::cout << the_value << std::endl;
return; // will be .join()'ed
}
void worker_function()
{
std::promise<int> the_promise;
std::future<int> the_future = the_promise.get_future();
std::thread t(printer_function, std::move(the_future));
int the_value = 10;
the_promise.set_value(the_value);
t.join(); // join printer_function here
}
int main(int argc, char** argv)
{
std::thread t(worker_function);
t.join();
return 0;
}
Fixed your example:
我很困惑如何实现线程间通信std::promise
。
这是一个小例子。当我尝试编译它时,出现错误“get is not member of std::promise”。
#include <iostream>
#include <thread>
#include <future>
void printer_function(std::promise<int>* the_promise)
{
// this function should wait for the promise / future ?????
int the_value = the_promise->get();
std::cout << the_value << std::endl;
return; // will be .join()'ed
}
void worker_function()
{
std::promise<int> the_promise;
std::future<int> the_future = the_promise.get_future();
std::thread t(printer_function, &the_promise);
int the_value = 10;
// somehow set the value of the promise / future and trigger a notification to printer_function ?
the_promise.set_value(the_value); // ?????
t.join(); // join printer_function here
}
int main(int argc, char** argv)
{
std::thread t(worker_function);
t.join();
return 0;
}
您混淆了 std::future
和 std::promise
的角色。
std::future<T>
是尚未存在的 T
结果的占位符。它生成 std::promise<T>
应放置承诺结果的对象。
在您的例子中,打印机函数是结果的接收者 - 使用 std::future
。
worker 函数负责生成结果 - 使用 std::promise
.
#include <iostream>
#include <thread>
#include <future>
void printer_function(std::future<int> result)
{
int the_value = result.get();
std::cout << the_value << std::endl;
return; // will be .join()'ed
}
void worker_function()
{
std::promise<int> the_promise;
std::future<int> the_future = the_promise.get_future();
std::thread t(printer_function, std::move(the_future));
int the_value = 10;
the_promise.set_value(the_value);
t.join(); // join printer_function here
}
int main(int argc, char** argv)
{
std::thread t(worker_function);
t.join();
return 0;
}
Fixed your example: