0

我正在尝试在 boost 中使用多线程来处理多个请求,并且在收到特定消息后,我将创建一个新线程来处理它,如下所示:

主文件

/** * 目标机器请求处理程序。 * * @param msg 收到的消息。 * @param ec 错误代码。 */ void handover_request_handler(odtone::mih::message &msg, const boost::system::error_code &ec) { 如果(欧共体) { log_(0, FUNCTION , "错误: ", ec.message()); 返回; } // 做一些事情 }

void event_handler(odtone::mih::message &msg, const boost::system::error_code &ec) { 如果(欧共体) { log_(0, FUNCTION , "错误: ", ec.message()); 返回; }

switch (msg.mid()) { // Destination Cloud Server received HO Commit Message case odtone::mih::indication::n2n_ho_commit: { boost::thread thrd(boost::bind(&handover_request_handler, msg, ec)); thrd.join(); } break; }

}

当我尝试使用 b2 工具编译它时,出现以下错误:

gcc.compile.c++ ../../bin.v2/app/lte_mih_usr/gcc-4.6/debug/link-static/runtime-link-static/main.o main.cpp:在函数'void event_handler(odtone: :mih::message&, const boost::system::error_code&)': main.cpp:189:69: 错误:使用已删除的函数'odtone::mih::message::message(const odtone::mih:: message&)' 在来自 ../../inc/odtone/mih/request.hpp:24:0 的文件中,来自 main.cpp:11:

那么如何解决这个问题呢?

非常感谢。

4

1 回答 1

1

构造thread函数复制其参数,并且message类型不可复制。要传递对目标函数的引用,您需要使用boost::ref(msg)

另请注意,使用bindwiththread是不必要的:

boost::thread thrd(&handover_request_handler, boost::ref(msg), boost::ref(ec));

构造thread函数实现与 相同的语义bind,因此 usingbind只是增加了不必要的额外复制。

于 2014-03-12T14:44:10.137 回答