Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.01.2014, 21:52   #1
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию [Delphi XE3] Работа с потоками

Всем доброго времени суток.

Задача такая: необходимо дождаться завершения потока и получить из него результат (ReturnValue)


Немного о моей программе:
при открытии программы, создается поток, по результатам которого, передаётся некоторое значение (TThread.ReturnValue). И пока в потоке происходит обработка данных, выполнение программы должно приостановиться и ожидать завершение потока и получение ReturnValue.


Вот собственно и вопрос, каким образом поток приостановить ?

Пробовал

Цитата:
while not TThread.Terminated do
sleep(100);
но программа засыпает и всё ... никаких ошибок ... ничего
-Jack- вне форума Ответить с цитированием
Старый 01.01.2014, 22:37   #2
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Если на время выполнения потока требуется приостановка программы, то нет смысла создавать поток. Исполняй код в основном потоке задачи.
doktor255 вне форума Ответить с цитированием
Старый 01.01.2014, 22:42   #3
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию

Цитата:
Сообщение от doktor255 Посмотреть сообщение
Если на время выполнения потока требуется приостановка программы, то нет смысла создавать поток. Исполняй код в основном потоке задачи.
С этим я согласен, что в данной ситуации нет смысла создавать поток, но всё же хочу выполнить через ожидание завершения потока ...
-Jack- вне форума Ответить с цитированием
Старый 01.01.2014, 22:59   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,430
По умолчанию

WaitForSingleObject подвесит основной поток.
Человек_Борща вне форума Ответить с цитированием
Старый 01.01.2014, 23:46   #5
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
WaitForSingleObject подвесит основной поток.
Спасибо, чуть позже попробую через WaitForSingleObject, а пока реализовал


Код:
while not TThread.Terminated do
begin
     Application.ProcessMessage;
     sleep(100);
end;
-Jack- вне форума Ответить с цитированием
Старый 02.01.2014, 12:29   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
пока реализовал
Ну и зачем это? Ты поток для чего создавал? Раз главный замораживаешь мог бы уже и без доппотока.
Вынеси логику, что должна сработать по завершению в OnTerminate или в конец OnExecute.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.01.2014, 05:31   #7
Dik0n
 
Регистрация: 26.11.2012
Сообщений: 6
По умолчанию

TThread.OnTerminate для этого существует и не надо ничего приостанавливать.
Dik0n вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi работа с потоками -Jack- Общие вопросы Delphi 3 12.09.2013 01:43
Работа с HotKey [Delphi XE3] -Jack- Общие вопросы Delphi 4 09.08.2013 02:35
Работа с TrayIcon [Delphi XE3] -Jack- Общие вопросы Delphi 3 05.08.2013 08:25
работа со строками в Delphi XE3 furstenberg Общие вопросы Delphi 4 05.06.2013 01:03
Работа с БД MySQL из Delphi XE3 Leximus БД в Delphi 4 16.02.2013 23:52