私はブースト::スレッドで遊んでいませんでしたが、これに似た何かが、あなたがこの
class Worker
{
public:
void addParams(const SomeParams ¶ms)
{
paramsQueue.push(params);
}
void start()
{
auto loop = [this]()
{
while(!interrupted)
{
//BLOCK HERE if queue is empty
auto params = paramsQueue.pop();
//do something with params
}
};
thread = {loop};
}
void interrupt()
{
interrupted = true;
}
private:
boost::thread thead;
std::queue<SomeParams> paramsQueue;
bool interrupted = false;
};
...
Worker worker;
worker.start();
while (!end) {
// some modifications to myPar
worker.addParams(params);
// other operations
}
ような何かを行うことができます
boost::thread t;
while (!end) {
// some modifications to myPar
if(t.joinable())
t.join();
t = {&myClass::myFun, this, myPar};
// other operations
}
EDIT に関するコメントを動作しますが、実装するために覚えておく必要がありますあなたが空のキューを読み込もうとすればあなたはUBを持つでしょうから。また、キューからのプッシュとポップはスレッドセーフでなければなりません。
"これ以外の操作"が実行されるのが遅れませんか? – charles
他の操作ですか? @charles、あなたは待たずに実行できる操作だけを並列に実行する必要があります – Netwave
myFunを一度に並列に実行する場合は、paramsのキューを持つクラスのようなものを作成します。キューからのパラメータ付き – stryku