Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.03.13;
Скачать: [xml.tar.bz2];

Вниз

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

 
Новичек ©   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.034 c
14-1107545208
kaif
2005-02-04 22:26
2005.03.13
Возвращаясь к губернаторам


9-1102832958
GURU-ru
2004-12-12 09:29
2005.03.13
Как сделать, чтобы в GLScene не проходить сквозь стены


1-1109744147
pkm
2005-03-02 09:15
2005.03.13
В Excel е залить ячейку нужным цветом.


4-1107204385
rks
2005-01-31 23:46
2005.03.13
Программирование USB


14-1109105043
olookin
2005-02-22 23:44
2005.03.13
Пункт меню в Outlook...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский