Boost Thread: использование удаленной функции Ошибка

Я пытаюсь использовать многопоточность в boost для обработки нескольких запросов, и после получения определенного сообщения я создам новый поток для его обработки, как показано ниже:

main.cpp

/ ** * Обработчик запроса машины назначения. * * @param msg Полученное сообщение. * @param ec Код ошибки. * / void handover_request_handler (odtone:: mih:: message & msg, const boost:: system:: error_code & ec) {if (ec) {log_ (0, FUNCTION, "error:", ec.message ()); вернуть; } // Делаем что-то}

void event_handler (odtone:: mih:: message & msg, const boost:: system:: error_code & ec) {if (ec) {log_ (0, FUNCTION, "error:", 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:

Так как решить эту проблему?

Большое спасибо.

1 ответ

Решение

thread конструктор копирует свои аргументы, а message тип не копируется. Чтобы передать ссылку на целевую функцию, вам нужно использовать boost::ref(msg)

Также обратите внимание, что с помощью bind с thread не нужно:

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

thread конструктор реализует ту же семантику, что и bindтак что используя bind просто добавляет ненужное дополнительное копирование.

Другие вопросы по тегам