Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.13;
Скачать: 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 вся ветка

Текущий архив: 2005.03.13;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.037 c
14-1108993511
juice
2005-02-21 16:45
2005.03.13
C++ Builder 5 Fatal: Unable to open file FILECTRL.OBJ


14-1108630193
КаПиБаРа
2005-02-17 11:49
2005.03.13
Клиентопользователям! Просба зайти обязательно.


1-1109177226
Aleksandr
2005-02-23 19:47
2005.03.13
Как прочитать первую и вторую строку текстового файла(*txt)?


14-1109105507
QuasiLamo
2005-02-22 23:51
2005.03.13
23 февраля


1-1109574679
mmms
2005-02-28 10:11
2005.03.13
Как бы зациклить "Tab" на одной панели, не переходить на другие