-
Здравствуйте. Нужно сделать дозвон по модему (запустить функцию, которая установит соединение и по окончании вернет значение 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 что ли?
-
> Это работает, но грузит систему. Можно как нибудь по другому? > Через TEvent что ли?
Зачем ? CallBack должен возвращаться только когда у тебя состояние поменялось.
> while (ConState<>RASCS_Connected) and (ConState<>RASCS_Disconnected) > do Application.ProcessMessages;
Конечно загрузит. Ты это что в CallBack Проверяешь ? Жди пока тебе не вернёться информация о том что соединение установлено. Асинхронные функции- для начинающего не совсем понятны, но потом понравяться и полюбишь :-)
-
Спасибо, что откликнулись.
> Конечно загрузит. Ты это что в CallBack Проверяешь ?
Нет, это это я проверяю после вызова RasDial. Мне нужна комбинация синхронной и асинхронной функции, т.е. вернуть значение нужно по окончании работы, но при этом отслеживать изменение состояния и иметь возможность прервать. С отслеживанием проблем нет, а вот как сделать функцию, которая завершится при установлении соединения? Делать бесконечный цикл проверки состояния не хотелось бы.
-
> а вот как сделать функцию, которая завершится при установлении > соединения?
Так состояние соединения, тебе на даст ответ ?
|