【发布时间】:2018-07-01 10:56:15
【问题描述】:
我正在尝试做这样的事情:
void commands_conn_handler(int socket, RPiServer& server) {
// Not important code about handling connection
}
class RPiServer {
public:
void Accept(void Accept(void (*acceped_conn_handler)(int, RPiServer&)) {
// (...)
int remote_socket = 0; // Doesn't matter - example.
std::thread conn_handler_thread(acceped_conn_handler, remote_socket, *this);
conn_handler_thread.join();
}
};
int main() {
RPiServer commands_server();
commands_server.Accept(commands_conn_handler);
}
当我尝试构建它时,出现了一些错误:
在 /usr/include/c++/6/thread:39:0 包含的文件中, 来自 src/rpi_server/rpiserver.cpp:11: /usr/include/c++/6/functional:在“struct std::_Bind_simple”的实例化中: /usr/include/c++/6/thread:138:26: 来自‘std::thread::thread(_Callable&&, _Args&& ...) [with _Callable = void (*&)(int, RPiServer&); _Args = {int&, RPiServer&}]’ src/rpi_server/rpiserver.cpp:89:79:从这里需要 /usr/include/c++/6/functional:1365:61: 错误:在‘class std::result_of’中没有名为‘type’的类型 typedef typename result_of<_callable>::type result_type; ^~~~~~~~~~~ /usr/include/c++/6/functional:1386:9: 错误:‘class std::result_of’中没有名为‘type’的类型 _M_invoke(_Index_tuple<_indices...>) ^~~~~~~~~ Makefile:29: 目标“build/rpi_server/rpiserver.o”的配方失败
当我以以下方式更改线程函数时(删除对对象的引用):
void commands_conn_handler(int socket) {
// Not important code about handling connection
}
class RPiServer {
public:
void Accept(void (*acceped_conn_handler)(int)) {
// (...)
int remote_socket = 0; // Doesn't matter - example.
std::thread conn_handler_thread(acceped_conn_handler, remote_socket);
conn_handler_thread.join();
}
};
int main() {
RPiServer commands_server();
commands_server.Accept(commands_conn_handler);
}
一切都构建得非常好。当我将引用作为参数传递给线程函数时,我做错了什么?
【问题讨论】:
标签: c++ multithreading c++11 pthreads stdthread