Конференция "WinAPI" » Дозвон по модему [D7, Win2k]
 
  • alexnmsk (26.04.08 01:37) [0]
    Здравствуйте. Нужно сделать дозвон по модему (запустить функцию, которая установит соединение и по окончании вернет значение 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 © (26.04.08 13:10) [1]

    > Это работает, но грузит систему. Можно как нибудь по другому?
    >  Через TEvent что ли?


    Зачем ? CallBack должен возвращаться только когда у тебя состояние поменялось.


    > while (ConState<>RASCS_Connected) and (ConState<>RASCS_Disconnected)
    > do Application.ProcessMessages;


    Конечно загрузит. Ты это что в CallBack Проверяешь ?  Жди пока тебе не вернёться информация о том что соединение установлено. Асинхронные функции- для начинающего не совсем понятны, но потом понравяться и полюбишь :-)
  • alexnmsk (26.04.08 17:19) [2]
    Спасибо, что откликнулись.

    > Конечно загрузит. Ты это что в CallBack Проверяешь ?  


    Нет, это это я проверяю после вызова RasDial.
    Мне нужна комбинация синхронной и асинхронной функции, т.е. вернуть значение нужно по окончании работы, но при этом отслеживать изменение состояния и иметь возможность прервать. С отслеживанием проблем нет, а вот как сделать функцию, которая завершится при установлении соединения? Делать бесконечный цикл проверки состояния не хотелось бы.
  • tesseract © (30.04.08 13:20) [3]

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


    Так состояние соединения,  тебе на даст ответ ?
 
Конференция "WinAPI" » Дозвон по модему [D7, Win2k]
Есть новые Нет новых   [134433   +21][b:0][p:0]