私はこの仲間からのThreadPool実装を使用しようとしています:https ://github.com/progschj/ThreadPool
メソッドに「関数」を追加するのに問題enqueue
があります...以下のメソッドの実装は次のenqueue
とおりです。
// 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;
}
これが私が使用しているものです:
#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;
});
}
}
これは、ライブラリの使用方法を示しようとしているサンプルコードの一部です...
コンパイルからの出力は次のとおりです。
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.
テンプレートを作成することに関しては、私はかなり無知です。なぜ上記が機能しないのかわかりません...誰かアイデアはありますか?
乾杯
jarrett