Как сказано в заголовке, мне не удалось надлежащим образом вызвать функцию организации очереди потоков 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
Невозможно поставить функцию в очередь в ThreadPool ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1715805226
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
Подробнее здесь: [url]https://stackoverflow.com/questions/78486238/unable-to-queue-a-function-to-a-threadpool[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия