![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Борьба с "Подвисанием" [D7]
Kazus © (2005-02-03 11:36:00)Хелло алл! Не подскажите что можно сделать чтобы программка не подвисала в момент набора номера модемом вот код дозвона:
Inc(CurTry);Inc(CurDial);
If CurTry<=MaxTry Then Begin
Application.ProcessMessages;
R:=DialToProvider(ComboBox1,ListBox1,hRas,CurDial);//Пока идет набор номера программа просто "Подвисает"
If R=0 Then begin
Timer1.Enabled:=False;
ReadData;
end else begin
Timer1.Enabled:=True;
end;
end
else begin
Timer1.Enabled:=False;
CurTry:=0;
end;
А вот код функциии DialToProvider
Function DialToProvider(Combo:TComboBox;LogList:TListBox;var hRas: ThRASConn; CurDial:Integer):Integer;
Var
DialParams : TRasDialParams;
AEntryDial : String;
Begin
RasHangUp(hRas);
With TiniFile.Create(extractfilepath(paramstr(0))+'global.ini') do begin
If (Length(ReadString('Dial-Up','Phone'+IntToStr(CurDial),''))=0) or (CurDial>8) Then CurDial:=1;
LogList.ItemIndex:=LogList.Items.Count-1;
LogList.Update;
AEntryDial:=Combo.Items.Strings[Combo.ItemIndex];
LogList.Items.Add('...'+AEntryDial);
LogList.Items.Add('....'+ReadString('Dial-Up','Phone'+IntToStr(CurDial),''));
LogList.ItemIndex:=LogList.Items.Count-1;
LogList.Update;
hRas:=0;
DialParams.dwSize:=Sizeof(TRasDialParams);
StrPCopy(DialParams.szEntryName, AEntryDial);
StrPCopy(DialParams.szUserName, ReadString('Dial-Up','UserName',''));
StrPCopy(DialParams.szPassword, ReadString('Dial-Up','Password',''));
StrPCopy(DialParams.szDomain, ReadString('Dial-Up','Domain',''));
StrPCopy(DialParams.szPhoneNumber,ReadString('Dial-Up','Phone'+IntToStr(CurDial),''));
Result:=RasDial(nil, nil, DialParams, 0, nil, hRAS);
End;
End;
Kazus (2005-02-03 13:05:00) [1]Да все уже разобрался! Thanks последний код вполне рабочим оказался!
Digitman (2005-02-03 12:50:00) [2]type
TDialThread = class(TThread)
protected
procedure Execute; override;
end;
..
procedure TDialThread.Execute;
begin
..
ReturnValue:=RasDial(..);
end;
..
DialThread := TDialThread.Create(..);
DialThread.WaitFor;
ShowMessage(IntToStr(DialThread.ReturnValue));
DialThread.Free;
Kazus (2005-02-03 12:46:00) [3]Var
R:Integer;
Begin
Inc(CurTry);Inc(CurDial);
If CurTry
Kazus (2005-02-03 12:34:00) [4]Сделал так...
beginthread(nil,1024,@SendDial,nil,0,RasThread);
и теперь дальнейшие инструкции идут не дожидаясь завершения работы соедиения... блин... как все таки сделать так, чтобы программа дождалась результата соединения и не подвисала в момент ожидания.... :-(
Kazus (2005-02-03 12:27:00) [5]Спасибо разобрался
Kazus (2005-02-03 12:16:00) [6]Через Thread? А может кто то нормальный пример привести если не сложно, а то в книге что то мало совсем ою этом написано.... понять сложно как и что в поток надо передать....
Diabolik (2005-02-03 11:42:00) [7]Попробуй процедуру в отдельный поток выделить...
Digitman (2005-02-03 11:41:00) [8]выноси вызов RasDial() в доп.трэд