I'm trying to use a ThreadPool implementation from this fellow: https://github.com/progschj/ThreadPool
I'm having trouble adding 'functions' to the enqueue
method...here is the implementation for the enqueue
method below:
// add new work item to the pool
template<class T, class F>
Result<T> ThreadPool::enqueue(F f)
{
Result<T> res;
{
std::unique_lock<std::mutex> lock(queue_mutex);
tasks.push_back(std::function<void()>(
[f,res]()
{
CallAndSet<T,F>()(res, f);
}));
}
condition.notify_one();
return res;
}
Here's what I'm using:
#include "ThreadPool.h"
#include <stdio.h>
#include <iostream>
int main() {
// create a thread pool of 4 worker threads
ThreadPool pool(4);
// queue a bunch of "work items"
for(int i = 0; i < 8; ++i) {
pool.enqueue([i] {
std::cout << "hello " << i << std::endl;
std::cout << "world " << i << std::endl;
});
}
}
It is part of the sample code that is trying to show how to use the library...
output from compilation is:
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
scons: building associated VariantDir targets: build
g++ -o build/main.o -c -std=c++11 -pthread -Wall -g main.cpp
main.cpp: In function 'int main()':
main.cpp:15:7: error: no matching function for call to 'ThreadPool::enqueue(main()::<lambda()>)'
main.cpp:15:7: note: candidate is:
In file included from main.cpp:1:0:
ThreadPool.h:117:15: note: template<class T, class F> Result<T> ThreadPool::enqueue(F)
ThreadPool.h:117:15: note: template argument deduction/substitution failed:
main.cpp:15:7: note: couldn't deduce template parameter 'T'
scons: *** [build/main.o] Error 1
scons: building terminated because of errors.
I'm pretty clueless when it comes to templating stuff..I have no idea why the above won't work...anyone have any ideas?
cheers
jarrett
You have to specify T explicitly as it is not part of the argument list and thus can not be reduced.
pool.enqueue<TheType>(functor);
I can not guess what T is supposed to be from the snippet alone.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.