LINUX.ORG.RU

[Qt] Thread termination

 


0

1

У меня у одного следующее приводит к зависанию программы:

myThread->terminate();
myThread->wait();

когда:

void MyThread::run()
{
for(;;);
}
поток не содержит цикла событий.

ЗЫ: Понятно что QThread::exit(0) или QThread::quit() работает через цикл событий в доках про это честно пишут, а вот про QThread::terminate() пишут якобы как про обертку чуть ли не с к системному pthread_cancel, или он сам не срабатывает (почему?)

Ладно pthread_cancel не срабатывает покуда нет входов в pthread_testcancel на многоядерной системе с низкой нагрузкой (??). А вот как Qt объяснить где ставить такие входы или подобную им хрень для windows?????

mskmsk1985
() автор топика
Ответ на: комментарий от panter_dsd

После Вас, есть что по делу сказать? нет жуй семечки.

mskmsk1985
() автор топика

написано же:

Each QThread can have its own event loop. You can start the event loop by calling exec(); you can stop it by calling exit() or quit(). Having an event loop in a thread makes it possible to connect signals from other threads to slots in this thread, using a mechanism called queued connections.

anonymous
()

только while(alive){}, только Проверенные Средства

anonymous
()
Ответ на: комментарий от anonymous

Да не помогает. Мало того на низком уровне pthread_cancel не приводит к остановке потока (жда минуту) пока не вставишь pthread_testcancel. А вот последнего в QThread нет ни с какого боку.

mskmsk1985
() автор топика

А под mingw как поведение? Кстати, интерес чисто академический? Ведь, pthread_cancel что-то типа goto: применять только в случае, когда точно знаешь, что делаешь.

P.S. в glib вообще нет gthread_cancel.

gag ★★★★★
()
Ответ на: комментарий от shty

Что-то типа компиляции в метакод в параллельном потоке. Кнопка ОТМЕНА должна сие поток убивать и тут вобщем насрать в каком месте и что он там делал.

mskmsk1985
() автор топика
Ответ на: комментарий от mskmsk1985

Что-то типа компиляции в метакод в параллельном потоке. Кнопка ОТМЕНА должна сие поток убивать

ну расставь флаги завершения в вызываемом методе, при необходимости выставляй их и наткнувшись на такой флаг неспешно выходи из цикла обработки - это самый чистый и простой метод с тредами

и поверь, те несчастные микросекунды, которые потеряются ты и не заметишь особо

Кнопка ОТМЕНА должна сие поток убивать и тут вобщем насрать в каком месте и что он там делал.

но почистить за собой он всё же «должон», не?

shty ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.