Форум » [x]Harbour » Как "снять" функцию или процедуру, которая "повисла" ? » Ответить

Как "снять" функцию или процедуру, которая "повисла" ?

Andrey: Всем привет. Столкнулся с большой проблемой... Как можно прервать (снять) выполняемую (зависшую) функцию через определенный промежуток времени ? Допустим у меня есть функция обновления с сайта VersionLoadInent(), а ответа с сайта нет, и вот ответа с сайта нет... Хочу через 5 минут прервать выполнения этой функции VersionLoadInent(). Заранее спасибо за помощь !

Ответов - 5

PSP: Используй отдельный поток. Он не будет мешать выполнению основной задачи.

Dima: Andrey пишет: Допустим у меня есть функция обновления с сайта VersionLoadInent() Надо смотреть что у тебя в этой функции. А вообще , попал в функцию VersionLoadInent , запомнил nstart:=Seconds() и далее сравнивай Seconds()-nstart со своим таймаутом. Если вышло время выходим из процедуры.

Andrey: PSP пишет: Используй отдельный поток. Он не будет мешать выполнению основной задачи. Не могу, т.к. программу собираю на хХарборе без мультипоточности. Что будет, если я соберу свою программу c [X] Use Multi Thread Library ? Плюсы и минусы этого режима - просветите пожалуйста... Dima пишет: Если вышло время выходим из процедуры. Там на INetConnect( cUrl,nPort ) вешается, т.е. сайт лежит и не отвечает....


Dima: Andrey пишет: Там на INetConnect( cUrl,nPort ) вешается, т.е. сайт лежит и не отвечает.... да явно таймаут не задать. а в сырцах он -1 [pre2] Use hb_inetGetHosts() and hb_inetConnectIP() for a finer timeout control [/pre2] Ну и пробни hb_inetTimeout( <socket> [, <nTimeout> ] )

PSP: Andrey пишет: Плюсы и минусы этого режима - просветите пожалуйста... Плюсы: поток работает "сам по себе", периодически (в цикле) проверяя наличие обновлений. Даже если выполнение потока натыкается на вынужденное ожидание, это никак не сказывается на основной программе. Т.е., "не мешает" выполнению основной программы и не заставляет пользователя ждать. Если завершается программа, завершаются все потоки, ею созданные. Минусов я не вижу.



полная версия страницы