Невозможно поставить функцию в очередь в ThreadPoolC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Невозможно поставить функцию в очередь в ThreadPool

Сообщение Anonymous »

Как сказано в заголовке, мне не удалось надлежащим образом вызвать функцию организации очереди потоков doJob(), чтобы назначить мою функцию вывода потоку в классе ThreadPool (код ниже). Кажется, проблема связана с вызовом std::bind аргументов. Было несколько первоначальных ошибок, в том числе:

C3867: нестандартный синтаксис, используйте & для создания указателя

Поэтому после нескольких изменений, приводящих к ошибкам, и дальнейших изменений мой вызов потока можно представить следующим образом:
int MainDlg::main()
{
char sendData;
int packetCount;
int portNum;
ThreadPool threads (2);

//Variables populated here in various ways

threads.doJob(std::bind(&MainDlg::OutputSend, sendData, packetCount, portNum)):
}

void MainDlg::OutputSend(char sendData, int packetCount, int portNum)
{
//Output Stuff
}

Теперь ошибки, которые я не могу устранить:

E30312: нет подходящего пользовательского преобразования из "std" ::_Binder" до "std::function " существует.


C2672: 'std::bind': соответствующая перегруженная функция не найдена

Я пытался присвоить функцию типу std::function , но столкнулся с той же проблемой. По словам людей из другого поста, это довольно элегантный и надежный класс/решение. Здесь есть ответы, которые находятся на грани решения имеющихся проблем, но я продолжаю возвращаться к этим же ошибкам при реализации других исправлений, найденных в SO. В чем я ошибаюсь?
(Примечание: я упростил код, чтобы было удобно задавать вопросы. doJob на самом деле вызывается из функции main() .
Исходный код ниже взят ЗДЕСЬ, на него ответил @David Schwartz:
#include
#include
#include
#include
#include
#include
#include

class ThreadPool
{
public:

ThreadPool (int threads) : shutdown_ (false)
{
// Create the specified number of threads
threads_.reserve (threads);
for (int i = 0; i < threads; ++i)
threads_.emplace_back (std::bind (&ThreadPool::threadEntry, this, i));
}

~ThreadPool ()
{
{
// Unblock any threads and tell them to stop
std::unique_lock l (lock_);

shutdown_ = true;
condVar_.notify_all();
}

// Wait for all threads to stop
std::cerr

Подробнее здесь: https://stackoverflow.com/questions/784 ... threadpool
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»