Как сказано в заголовке, мне не удалось надлежащим образом вызвать функцию организации очереди потоков 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++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как текущая очередь, очередь отправки и целевая очередь взаимодействуют друг с другом в GCD?
Anonymous » » в форуме IOS - 0 Ответы
- 105 Просмотры
-
Последнее сообщение Anonymous
-