Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > WaitForMultipleObjects


Автор: guest11 25.12.2019, 02:18
есть вопрос 


про


while WaitForMultipleObjects(mwo, @hThread[i][0], True, 50) = WAIT_TIMEOUT do
Application.ProcessMessages;


то есть необходимо закрывать поток если он идет больше 50 милисекунд ,





как правильно написать чтоб поток закрывался если он идет больше 50 миллисекунд ,



добавил 

var

hThread:array of array of Cardinal;

начало запускатся


что такое mwo

Автор: guest11 25.12.2019, 04:13
может  не  верно  описал  задачу  ,  попробую  еще  раз  ,

при  пинге  многопоточном  ,  ping    на  работающий  хост  идет  быстро  ,



а  на  не работающий   host    идет  error   ,   1000  миллисекунд


необходимо  чтоб  error   ,

время  ответа   уменьшить  до  50  миллисекунд  ,

Автор: Romikgy 25.12.2019, 11:15
Цитата(guest11 @  25.12.2019,  03:13 Найти цитируемый пост)
1000  миллисекунд

это таймаут фунцкии пинга, а не работы потока.... 

https://www.eomy.net/forum/ping-sredstvami-delphi-vt2290.html
http://citforum.ck.ua/nets/articles/ping/
http://www.codenet.ru/progr/delphi/stat/ping.php

Автор: guest11 25.12.2019, 15:32
Цитата(Romikgy @ 25.12.2019,  11:15)
Цитата(guest11 @  25.12.2019,  03:13 Найти цитируемый пост)
1000  миллисекунд

это таймаут фунцкии пинга, а не работы потока.... 

https://www.eomy.net/forum/ping-sredstvami-delphi-vt2290.html
http://citforum.ck.ua/nets/articles/ping/
http://www.codenet.ru/progr/delphi/stat/ping.php

timeaut установлен через edit


Код

IcmpSendEcho(hIP,
destAddress.S_addr,
@pingBuffer,
sizeof(pingBuffer),
Nil,
pIpe,
sizeof(icmp_echo_reply) + sizeof(pingBuffer),
strtoint(form1.Edit2.text));




писал же что когда пинг проходит нормально то идет быстрый ответ значит дело не timeaut ,

а в error ,

Автор: Romikgy 25.12.2019, 15:43
Цитата(guest11 @  25.12.2019,  14:32 Найти цитируемый пост)
а в error ,

ну обрабатывайте корректно ошибки ...

Автор: guest11 25.12.2019, 21:01
Цитата(Romikgy @ 25.12.2019,  15:43)
Цитата(guest11 @  25.12.2019,  14:32 Найти цитируемый пост)
а в error ,

ну обрабатывайте корректно ошибки ...

скорее   WaitForMultipleObjects

mwo :=  MAXIMUM_WAIT_OBJECTS;



user posted image

Автор: guest11 25.12.2019, 21:28
{ ожидание завершения работы потоков }
 for i:=0 to NumbArr-1 do
 begin
   if (m>0)and (i=NumbArr - 1)
   then mwo := m;
   while WaitForMultipleObjects(mwo, @hThread[i][0], True, 50) = WAIT_TIMEOUT do
   Application.ProcessMessages;
 end;

Автор: Romikgy 25.12.2019, 21:38
вы уперты, с одной стороны хорошо , с другой, вы ходите по кругу, и ваша упертость до одного места....
WaitForMultipleObjects ждет окончание потока... а у вас проблема внутри потока... 

но вы умнее всех, так что решайте сами...

Автор: guest11 25.12.2019, 21:47
Цитата(Romikgy @ 25.12.2019,  21:38)
вы уперты, с одной стороны хорошо , с другой, вы ходите по кругу, и ваша упертость до одного места....
WaitForMultipleObjects ждет окончание потока... а у вас проблема внутри потока... 

но вы умнее всех, так что решайте сами...

можно и  функция     ,

функцию  таймаута  не  видел  ,


 

просто  у  меня   исходник  на  руках  где  нормально обрабатывается    error

http://www.delphisources.ru/pages/sources/internet/2007_year/ping_thread.html


но  там  закрученный  код   ,

Автор: guest11 25.12.2019, 23:00
скорее вышло  недоразумение    ,  

с программы  ,  с  которой  беру  пример  ,   так  же  тормозит  ,  и  это  скорее  не  решается   ,

Автор: guest11 26.12.2019, 01:19
Программа   платная   ,

Так  же  есть  версия    с    менее  функционалом   ,  но со   свободным  скачиванием   ,

http://radijo.noip.me/software/

Автор: fairsinger 22.8.2022, 12:07
Вы упрямы, что, с одной стороны, хорошо, но из-за этого вы ходите по кругу, и ваше упрямство ограничивается одним местом...
WaitForMultipleObjects ожидает завершения потока... и в потоке возникла проблема...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)