Вниз
Скачать: CL | DM;

Запуск процедуры на выполнение.   Найти похожие ветки 

← →
Новичек ©   (2005-02-26 22:47) [0]

Уважаемые Мастера, подскажите, пожалуйста, как можно запустить какую-либо процедуру (функцию) на выполнение и не дожидаясь её окончания продолжить программу.
Пробовал с помощью PostMessage (SendMessage) - результат плачевный.


← →
Новичек ©   (2005-02-26 23:28) [1]

Мда... Видно, проблема серьёзная... Если сумею победить - сообщу.


← →
Anatoly Podgoretsky ©   (2005-02-26 23:44) [2]

Можно, самой первой строчкой оператор Exit


← →
jack128 ©   (2005-02-26 23:45) [3]

запустить её в потоке. TThread + F1


← →
Новичек ©   (2005-02-26 23:47) [4]

Но ведь до этого оператора будет ожидание возврата:
DoSomething;
Exit;//Сюда передастся управление после выполнения процедуры DoSomeThing


← →
Новичек ©   (2005-02-26 23:48) [5]


> jack128
Вызов BeginThread также будет ожидать завершения потока. Или я не прав?


← →
jack128 ©   (2005-02-26 23:55) [6]

Новичек ©   (26.02.05 23:48) [5]
Вызов BeginThread также будет ожидать завершения потока. Или я не прав?

не прав


← →
Новичек ©   (2005-02-26 23:56) [7]


> jack128
Спасибо, сейчас попробую.


← →
Новичек ©   (2005-02-27 00:01) [8]


> jack128
Попробовал. Странно, но на завершение потока порой уходит до 1 секунды. Это нормально для потока? Приоритет tpNormal.


← →
jack128 ©   (2005-02-27 00:03) [9]

Новичек ©   (27.02.05 0:01) [8]
хе, а что этот поток делает?


← →
Новичек ©   (2005-02-27 00:06) [10]


> jack128
Да на скорую руку наваял сокет, работающий в потоке.


← →
DiamondShark ©   (2005-02-27 00:34) [11]

Вообще-то, наваять сокет можно и так, что на завершение будет уходить и час и миллиард лет.
Ответить на вопрос: "Нормально ли это?" нельзя, не видя "этого".


← →
Новичек ©   (2005-02-27 00:41) [12]


> 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:58) [13]

Тормозить он может в трёх местах:
Вызовы SendText,
И обработка SendMessage.

Если SendText зависит только от состояния сети, то про сообщение ничего сказать нельзя, бо не видно обработчика сообщения.

ЗЫ
Кстати, а почему
procedure MyThread;
?


← →
Piter ©   (2005-02-27 01:14) [14]

советую прочитать про потоки. Самому тут ковыряться не очень хорошо, 100% нарвешься на глюки. Стандартно - на Synchronize


← →
Новичек ©   (2005-02-27 07:02) [15]


> DiamondShark


> Кстати, а почему
> procedure MyThread;
> ?

Потому что поток формируется с помощью BeginThread.
В обработчике сообщения тривиальный ShowMessage.
У меня есть подозрение, что EndThread как-то фривольно работает: вроде "Нехрен спешить, освободится система - я и терминирую поток". Как вы думаете?

> Piter
Уже нарывался кучу раз :-) Потому и пришел сюда за советом, больше некуда :-)
Synchronize"ом пользуюсь постоянно, в данном примере в нем нет необходимости.


← →
jack128 ©   (2005-02-27 09:49) [16]

Новичек ©   (27.02.05 7:02) [15]
Потому что поток формируется с помощью BeginThread.
И что дальше? Справку читал?



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.022 c
14-1109063793
Ega23
2005-02-22 12:16
2005.03.13
23 февраля посвещается...


1-1109396807
Dr. Genius
2005-02-26 08:46
2005.03.13
Была ли зарезервирована (хот кей) определенная клавиша


6-1105373369
TButton
2005-01-10 19:09
2005.03.13
Послать запрос скрипту на сервере и получить ответ


14-1108810765
Сергей Г
2005-02-19 13:59
2005.03.13
Компонент TF1Book


1-1109669135
Новичек
2005-03-01 12:25
2005.03.13
Как работает PostMessage.




   Наверх