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

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

main.cpp

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

void event_handler (odtone :: mih :: message &msg, const boost :: system :: error_code &ек) { если (ес) { log_ (0, ФУНКЦИЯ, "ошибка:", 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:

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

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

0

Решение

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

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

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

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

1

Другие решения

Других решений пока нет …