【发布时间】:2019-03-16 06:12:44
【问题描述】:
我正在尝试在 folly::ThreadedExecutor 中添加一些正常的作业,它们是 folly::Function。但是,folly::ThreadedExecutor 似乎只提供接受 folly::Function<void()> 的接口。如何添加带有参数和输出的函数?
// Here's a simple code segment
#include <folly/executors/ThreadedExecutor.h>
#include <folly/futures/Future.h>
int my_func(int t) {
sleep(t);
return 1;
}
int main() {
folly:ThreadedExecutor executor;
folly:Function<int(int)> job = my_func;
executor.add(job);
}
用gcc -o folly_executor --std=c++14 -g -O0 -Wall folly_executor.cc -lgtest -lfolly -lpthread -lglog -lgflags -ldl -ldouble-conversion -levent -liberty -lboost_context编译
错误表示add 函数原型在executor 和my_func 中不匹配。以下是编译错误。
In file included from folly_executor.cc:2:0:
/usr/local/include/folly/executors/ThreadedExecutor.h:67:8: note:
candidate: virtual void folly::ThreadedExecutor::add(folly::Func)
void add(Func func) override;
^~~
/usr/local/include/folly/executors/ThreadedExecutor.h:67:8: note: no
known conversion for argument 1 from 'folly::Function<int(int)>' to
'folly::Func {aka folly::Function<void()>}'
不知道add函数原型的限制是否有必要的原因。如果不是,那一定是正确的做法。
顺便说一句,tutorial 和 Github 上的文档总是使用 folly::executor 和 folly:Future。我应该以这种方式使用 folly:Function 吗?
【问题讨论】:
-
在创建Minimal, Complete, and Verifiable Example 时,请确保生成您遇到的错误的是实际代码!您显示的当前代码将有错误,但不是您询问的那些。
-
感谢您的评论。我已经编辑了我的问题。如果需要,我会提供更多额外信息。
标签: c++ multithreading folly