我正在处理一个线程池。我有以下函数将调度工作分配给线程。
template<typename T>
Future<T> dispatchFuture(const std::function<T(void)>& work, Priority priority = Priority::Default) {
Future<T> future;
std::cout << !!work << std::endl;
this->dispatch([work, future]() mutable {
std::cout << !!work << std::endl;
future.setValue(work());
}, priority, false);
return future;
}
轻松获得结果会很好,所以我写了这个函数:
std::bad_function_call
但是,调度的lambda在执行时抛出cout
异常。 work
语句显示dispatchFuture
在dispatchFuture
调用中包含有效目标,但不在lambda中。
这就是threadPool.dispatchFuture<int>([]() {
std::cout << "I'm a work item producing results" << std::endl;
return 4 + 5;
});
被称为
{{1}}