Главная страница
    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.038 c
1-1109327534
AndreykA
2005-02-25 13:32
2005.03.13
маленькая проблемка с RichEdit


3-1108030793
Aleksandr.
2005-02-10 13:19
2005.03.13
Что будет быстрее?


4-1107149775
DelphiN!
2005-01-31 08:36
2005.03.13
Как считать данные с Com-овского CardReader-а ?


1-1109604747
вопрос
2005-02-28 18:32
2005.03.13
Вопрос по стандартному обработчику Edit - Change


4-1106860078
Unknown
2005-01-28 00:07
2005.03.13
Окно сзади





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский