Russian Qt Forum
Ноябрь 24, 2024, 17:54 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QThread Qt 3.3.x  (Прочитано 4279 раз)
Steven_Orko
Гость
« : Июнь 08, 2007, 10:19 »

В силу необходимости использую такую версию Qt. В ней в классе QThread нет сигнала finished(), который есть в Qt 4, в принципе, по понятным причинам. Однако, мне необходимо узнать о том, что функция потока завершилась именно в тот момент, когда она завершилась. Кто-нибудь делал такое? Для чего это надо... В процессе работы создаю несколько десятков потоков по необходимости. Т.к. каждый объект QThread занимает память, то хочу его удалять после того, как поток завершится, но не знаю, как отследить этот момент.
Цикл
Код:

while (true)
{
}

в отдельном потоке занимает 100% процессорного времени, нужно ставить какие-то QWaitCondition. Вот только как узнать момент, в который надо сигналить?


P.S. ОС Linux, 2.6.x.
Записан
Sergeich
Гость
« Ответ #1 : Июнь 08, 2007, 12:48 »

Попробуй заюзать QApplication::postEvent в конце ф-ции потока
Записан
Steven_Orko
Гость
« Ответ #2 : Июнь 13, 2007, 08:55 »

Попробовал. Эта штука в большинстве случаев работает правильно, но вот нет, нет, да и появится поток, который еще не успел почему-то завершится при обработке данного события ((((((((...

Я решил добавить еще одну синхронизацию, и отслеживать кол-во потоков до выполняемого действия и после... ща попробую, вроде должно сработать. Да, еще эти потоки надоть отсоединить, чтобы ресурсы сразу освобождались по завершению потока.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #3 : Июнь 13, 2007, 09:37 »

Можно добавить

while (true)
{
...
sleep(100);
}

чтобы 100% времени не отжиралось.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Steven_Orko
Гость
« Ответ #4 : Июнь 13, 2007, 13:15 »

Ага, тож делал так, но все равно, не есть хорошо, потому что в зависимости от процессора, время занятости тоже довольно сильно варьируется, причем, у меня начиная примерно от 8%.... это не есть хорошо ))))
Записан
Sergeich
Гость
« Ответ #5 : Июнь 13, 2007, 16:39 »

Цитата: "Steven_Orko"
Попробовал. Эта штука в большинстве случаев работает правильно, но вот нет, нет, да и появится поток, который еще не успел почему-то завершится при обработке данного события ((((((((...
Сделай в обработчике событий wait  для завершающегося потока, если postEvent стоит в самом конце ф-ции потока, то он должен отработать мгновенно и не тормозить главный событийный цикл.
Записан
Steven_Orko
Гость
« Ответ #6 : Июнь 13, 2007, 17:49 »

Я уже решил проблемму с помощью платформо-зависимого кода... Все равно у меня многопоточный сервер написан с использованием pthreads Linuxa... И использоваться будет только в Linux.
А с wait я играл, в разные места ставил... Твой вариант самый оптимальный оказался ))))) Но мне показалось, что использовать wait не комильфо ))))
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.101 секунд. Запросов: 23.