![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запуск процедуры на выполнение. [D7, WinXP]
Новичек © (2005-02-26 22:47:00)Уважаемые Мастера, подскажите, пожалуйста, как можно запустить какую-либо процедуру (функцию) на выполнение и не дожидаясь её окончания продолжить программу.
Пробовал с помощью PostMessage (SendMessage) - результат плачевный.
jack128 (2005-02-27 09:49:00) [1]Новичек © (27.02.05 7:02) [15]
Потому что поток формируется с помощью BeginThread.И что дальше? Справку читал?
Новичек (2005-02-27 07:02:00) [2]
> DiamondShark
> Кстати, а почему
> procedure MyThread;
> ?
Потому что поток формируется с помощью BeginThread.
В обработчике сообщения тривиальный ShowMessage.
У меня есть подозрение, что EndThread как-то фривольно работает: вроде "Нехрен спешить, освободится система - я и терминирую поток". Как вы думаете?
> Piter
Уже нарывался кучу раз :-) Потому и пришел сюда за советом, больше некуда :-)
Synchronize'ом пользуюсь постоянно, в данном примере в нем нет необходимости.
Piter (2005-02-27 01:14:00) [3]советую прочитать про потоки. Самому тут ковыряться не очень хорошо, 100% нарвешься на глюки. Стандартно - на Synchronize
DiamondShark (2005-02-27 00:58:00) [4]Тормозить он может в трёх местах:
Вызовы SendText,
И обработка SendMessage.
Если SendText зависит только от состояния сети, то про сообщение ничего сказать нельзя, бо не видно обработчика сообщения.
ЗЫ
Кстати, а почему
procedure MyThread;
?
Новичек (2005-02-27 00:41:00) [5]
> DiamondShark
Понял, вот исходник:
procedure MyThread;
begin
MySocket.Socket.SendText(#13#10);
MySocket.Socket.SendText(#4);
SendMessage(MainWnd, WM_SocketClose, 0, 0);
EndThread(123);
end;
Иногда поток завершается практически мгновенно, но чаще почему-то тормозит. Может, дело в отправке сообщения?
DiamondShark (2005-02-27 00:34:00) [6]Вообще-то, наваять сокет можно и так, что на завершение будет уходить и час и миллиард лет.
Ответить на вопрос: "Нормально ли это?" нельзя, не видя "этого".
Новичек (2005-02-27 00:06:00) [7]
> jack128
Да на скорую руку наваял сокет, работающий в потоке.
jack128 (2005-02-27 00:03:00) [8]Новичек © (27.02.05 0:01) [8]
хе, а что этот поток делает?
Новичек (2005-02-27 00:01:00) [9]
> jack128
Попробовал. Странно, но на завершение потока порой уходит до 1 секунды. Это нормально для потока? Приоритет tpNormal.
Новичек (2005-02-26 23:56:00) [10]
> jack128
Спасибо, сейчас попробую.
jack128 (2005-02-26 23:55:00) [11]Новичек © (26.02.05 23:48) [5]
Вызов BeginThread также будет ожидать завершения потока. Или я не прав?
не прав
Новичек (2005-02-26 23:48:00) [12]
> jack128
Вызов BeginThread также будет ожидать завершения потока. Или я не прав?
Новичек (2005-02-26 23:47:00) [13]Но ведь до этого оператора будет ожидание возврата:
DoSomething;
Exit;//Сюда передастся управление после выполнения процедуры DoSomeThing
jack128 (2005-02-26 23:45:00) [14]запустить её в потоке. TThread + F1
Anatoly Podgoretsky (2005-02-26 23:44:00) [15]Можно, самой первой строчкой оператор Exit
Новичек (2005-02-26 23:28:00) [16]Мда... Видно, проблема серьёзная... Если сумею победить - сообщу.