ich mit boost :: thread nicht gespielt, aber so etwas wie dies sollte
boost::thread t;
while (!end) {
// some modifications to myPar
if(t.joinable())
t.join();
t = {&myClass::myFun, this, myPar};
// other operations
}
EDIT in Bezug auf Kommentare arbeiten Sie so etwas wie dieses
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
}
Aber denken Sie daran tun können, implementieren blockieren, weil Sie UB haben, wenn Sie versuchen werden, in der leeren Warteschlange zu lesen. Auch Push und Pop aus der Warteschlange müssen threadsicher sein.
Würde dies die Ausführung der "anderen Operationen" nicht verzögern? – charles
Welche anderen Operationen? @ charles, du musst parallel nur die Operationen ausführen, die du ausführen kannst, ohne zu warten – Netwave
Wenn du myFun parallel aber nur auf einmal ausführen willst, erstelle etwas wie class mit einer Warteschlange von params, die in anderen Threads myClass :: fun sequentiell ausführen mit Parametern aus der Warteschlange – stryku