![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Дозвон по модему [D7, Win2k]
alexnmsk © (2008-04-26 01:37:00)Здравствуйте. Нужно сделать дозвон по модему (запустить функцию, которая установит соединение и по окончании вернет значение boolean). Во время установления соединения, отображать изменение состояния и позволить пользователю прервать его нажатием кнопочки. Использую ф-цию
RasDial(Nil, Nil, DialParams, 0, @RasCallback, hRAS) где RasCallBack - процедура, позволяющая отобразить состояние.
procedure RasCallback(msg: Integer; state: TRasConnState;
error: Integer); stdcall;
Begin
ConState:= State; //глобальная переменная
...
End;
При таком вызове RasDial возвращает значение немедленно и затем вызывает RasCallBack при изменении состояния. Теперь проблема: как сделать правильное ожидание окончания установления соединения после вызова RasDial?
while (ConState<>RASCS_Connected) and (ConState<>RASCS_Disconnected) do Application.ProcessMessages;
Это работает, но грузит систему. Можно как нибудь по другому? Через TEvent что ли?
tesseract (2008-04-30 13:20:00) [1]
> а вот как сделать функцию, которая завершится при установлении
> соединения?
Так состояние соединения, тебе на даст ответ ?
alexnmsk (2008-04-26 17:19:00) [2]Спасибо, что откликнулись.
> Конечно загрузит. Ты это что в CallBack Проверяешь ?
Нет, это это я проверяю после вызова RasDial.
Мне нужна комбинация синхронной и асинхронной функции, т.е. вернуть значение нужно по окончании работы, но при этом отслеживать изменение состояния и иметь возможность прервать. С отслеживанием проблем нет, а вот как сделать функцию, которая завершится при установлении соединения? Делать бесконечный цикл проверки состояния не хотелось бы.
tesseract (2008-04-26 13:10:00) [3]
> Это работает, но грузит систему. Можно как нибудь по другому?
> Через TEvent что ли?
Зачем ? CallBack должен возвращаться только когда у тебя состояние поменялось.
> while (ConState<>RASCS_Connected) and (ConState<>RASCS_Disconnected)
> do Application.ProcessMessages;
Конечно загрузит. Ты это что в CallBack Проверяешь ? Жди пока тебе не вернёться информация о том что соединение установлено. Асинхронные функции- для начинающего не совсем понятны, но потом понравяться и полюбишь :-)