![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
AD |
![]()
Сообщение
#1
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Проблема следующая. Есть модальное диалоговое окошко, в котором рисуется какой-то график. При открытии окошка запускается параллельный поток, который заполняет необходимый вектор координат графика и постепенно отрисовывается. В функции run() вызывается функция в которой имеется цикл заполнения вектора. Если человек вдруг надоело ждать или он передумал смотреть этот график или ошибся (короче, по любой какой-то причине решил прервать отрисовку) и закрывается окно. При закрытии я вызываю функцию quit()! НО: после выполнения quit() в отладчике вижу, что мы снова попадаем в функцию c циклом. Что необходимо сделать, чтобы этот цикл сразу завершался? Если я после quit() пытаюсь вызвать wait(), то программа конкретно зависает.
Сообщение отредактировал AD - 23.10.2009, 16:22 |
|
|
![]() |
SABROG |
![]()
Сообщение
#2
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
Как я понял за всё время существования потоков ничего кроме жестокого убийства потока и if (terminatedFlag) ничего не придумали?
|
|
|
AD |
![]()
Сообщение
#3
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Цитата(SABROG) Как я понял за всё время существования потоков ничего кроме жестокого убийства потока и if (terminatedFlag) ничего не придумали? Да, блин! ![]() Цитата Так введи в цикл еще одно условие для преждевременного выхода. До этого додумался, но такое решение не нравится. ![]() Жаль, что в Qt это не введено еще. |
|
|
BRE |
![]()
Сообщение
#4
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
Жаль, что в Qt это не введено еще. А что можно ввести? ![]() QEventLoop::exit (quit) и соответственно QThread::quit используют такой же подход со специальной переменной, при изменении которой цикл заканчивается. В своих циклах нужно использовать свои переменные. А почему это решение не нравиться? |
|
|
AD |
![]()
Сообщение
#5
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
А что можно ввести? ![]() QEventLoop::exit (quit) и соответственно QThread::quit используют такой же подход со специальной переменной, при изменении которой цикл заканчивается. В своих циклах нужно использовать свои переменные. А почему это решение не нравиться? Стоп.... Не пойму о каком еще цикле, который заканчивается, идет речь? Если нет своего цикла, то вообще в функцию run() задет раз и выйдет, все... О каком цикле идет речь, который заканчивается с помощью quit()? Да кстати, exec() никакие циклы не запускает - проверял! А почему это решение не нравиться? Да почему, нормальное решение. Но уж очень какое-то искусственное! |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 9.6.2025, 21:28 |