/ / Преместване на обект в нишка с std :: нишки? - multithreading, qt, c ++ 11, stdthread

Преместване на обект към нишка със std :: нишки? - multithreading, qt, c ++ 11, stdthread

Имам основно заявление за производител / потребителкъдето някои работници отиват и изпълняват задачата си по споделен проблем. Това не е достатъчно тривиално, за да се използва едновременно за или нещо подобно.Аз съм свикнал да използва Qt за threading, защото го прави много лесно да се правят неща като това:

for(int i = 0; i < nworkers; i++){
Worker* myworker = new Worker();
QThread* thread = new QThread;
myworker->attachToThread(thread);

myworker->doSomething(someArgument);
myworker->doSomethingElse(someOtherArgument);
myworker->run();
}

Бих искал да опитам да премина към използване std::thread частично за учебния процес и частичнотака че не трябва да се свързвате в Qt.Така че въпросът ми е, има ли ясен начин да се преобърне обект в нишка и след това да се извикат функции от него? Моделът по-горе работи много добре в този случай. за моята кандидатура мога да избягам с използването std::async и прехвърлянето на всичко като аргументи за функцията на работника, но бях любопитен, ако имаше начин да напиша горния код по отношение на стандартната библиотека вместо това.

Предполагам, че мога да направя нещо подобно

void foo(someArguments){
Worker* myworker = new Worker();
myworker->doSomething(someArguments);
myworker->run();
}

и нишка, че, но след това всичко е капсулиран вътре foo, С Qt имам достъп до този обект с резба навсякъде, където е в обхвата.

Разбирам основите на изпълняването на функция в друга нишка със стандартната библиотека, но се чудех дали това, което искам, е нещо, което е възможно само с помощта на по-голяма рамка?

Отговори:

0 за отговор № 1

Искате ли да използвате класовия метод като функция на нишка?

std::thread t(&Worker::run, myworker, arg1, arg2, ...);
t.join();

или може би да направите Worker метод

Worker::runT() {
doSomething();
doMore();
std::thread t(&Worker::run, this);
}

бихте могли да поставите .join () някъде или в деструктор