Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запуск процедуры на выполнение. [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]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо