Форум: "Основная";
Текущий архив: 2005.02.20;
Скачать: [xml.tar.bz2];
ВнизБорьба с "Подвисанием" Найти похожие ветки
← →
Kazus (2005-02-03 11:36) [0]Хелло алл! Не подскажите что можно сделать чтобы программка не подвисала в момент набора номера модемом вот код дозвона:
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;
← →
Digitman © (2005-02-03 11:41) [1]выноси вызов RasDial() в доп.трэд
← →
Diabolik © (2005-02-03 11:42) [2]Попробуй процедуру в отдельный поток выделить...
← →
Kazus (2005-02-03 12:16) [3]Через Thread? А может кто то нормальный пример привести если не сложно, а то в книге что то мало совсем ою этом написано.... понять сложно как и что в поток надо передать....
← →
Kazus (2005-02-03 12:27) [4]Спасибо разобрался
← →
Kazus (2005-02-03 12:34) [5]Сделал так...
beginthread(nil,1024,@SendDial,nil,0,RasThread);
и теперь дальнейшие инструкции идут не дожидаясь завершения работы соедиения... блин... как все таки сделать так, чтобы программа дождалась результата соединения и не подвисала в момент ожидания.... :-(
← →
Kazus (2005-02-03 12:46) [6]Var
R:Integer;
Begin
Inc(CurTry);Inc(CurDial);
If CurTry<=MaxTry Then Begin
ListBox1.Items.Add("Ïîïûòêà íàáîðà "+IntToStr(CurTry)+" èç "+IntToStr(MaxTry));
R:=beginthread(nil,1024,@SendDial,nil,0,RasThread);
while WaitforSingleObject(R,200)=WAIT_TIMEOUT do application.ProcessMessages;
If DialResult=0 Then begin
AddStringToListBox("Äîçâîíèëèñü óñïåøíî...");
Timer1.Enabled:=False;
ReadData;
end else begin
AddStringToListBox(IntToStr(DialResult)+" Îøèáêà ïðè íàáîðå íîìåðà...");
Timer1.Enabled:=True;
end;
end
else begin
Timer1.Enabled:=False;
CurTry:=0;
end;
Вот код
← →
Digitman © (2005-02-03 12:50) [7]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 13:05) [8]Да все уже разобрался! Thanks последний код вполне рабочим оказался!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.02.20;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.04 c