Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» TThread и С++ Builder 4.

Автор: Jojobets
Дата сообщения: 27.09.2004 12:54
Создаю поток
...
thread = new TMyThread(false);
...

При этом поток завершается (терминируется) только когда функция, в которой его создаю, завершается. Это глюк или так и должно быть?
Просто хотелось запустить в имеющийся функции еще один экземляр потока, дождавшись завершения ранее запущенного.
Автор: WiseAlex
Дата сообщения: 27.09.2004 17:35
Jojobets
Потоки либо обрабатывают события, либо нет. Если
Цитата:
TMyThread
не обрабатывает сообщения, то либо надо установить переменную-флаг, либо (если поток выполняет определенную работу и завершается) просто ждать окончания работы потока.
Если поток обрабатывает сообщения, то послать ему WM_QUIT и ждать когда он завершится.
ожиданием с пом. WaiForSingleObject

Автор: vserd
Дата сообщения: 29.09.2004 11:48
Jojobets

Цитата:
При этом поток завершается (терминируется) только когда функция, в которой его создаю, завершается. Это глюк или так и должно быть?

thread = new TMyThread(false);
Где описана? на уровне функции или где повыше (в области видимости)? если на уровне функции или ты делаешь Free, тогда все впорядке, если повыше, тогда не нормально.

Если тебе нужно дождаться зваершения потока, воспользуйся семейством функций WaitForXXXX, обычно хватает WaitForSingleObject

Для принудительного завершения потока, ты должен обрабатывать в TThread.Execute свойство Terminated. Если оно True, тогда ты должен завершить свои вычисления. TTread.Terminate просто устанавливает Terminated в True.

Автор: Jojobets
Дата сообщения: 30.09.2004 15:43
TMyTherad *thread;
описана в классе формы.
Кто нибудь приведет пример, как с помощью WaitForSingleObject подождать завершения потока?
Автор: xliker
Дата сообщения: 18.09.2011 20:30
Добрый вечер. Подскажите пожалуйста, как исправить неактивность компонентов во время работы процессов в потоках на фоне, в частности, сделать рабочей кнопку паузы потока, отклик на которую происходит лишь после отработки потока. Потоки использую впервые, так что извиняюсь на дурацкий вопрос.
Автор: Sota
Дата сообщения: 24.10.2011 15:29
Jojobets

Для своих потоков, которые создаются 1 раз, инициализируются и потом как закончат обработку ждут команды обработать следующую порцию данных, я использовал стандартный класс TEvent (SyncObjs).

Создаешь экземпляр

Код: FEvent := TEvent.Create(nil, False, False, PChar(nil));

Страницы: 1

Предыдущая тема: BDE


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.