Форум: "Основная";
Текущий архив: 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.035 c