Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.20;
Скачать: CL | DM;

Вниз

Борьба с "Подвисанием"   Найти похожие ветки 

 
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("&#207;&#238;&#239;&#251;&#242;&#234;&#224; &#237;&#224;&#225;&#238;&#240;&#224; "+IntToStr(CurTry)+" &#232;&#231; "+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("&#196;&#238;&#231;&#226;&#238;&#237;&#232;&#235;&#232;&#241;&#252; &#243;&#241;&#239;&#229;&#248;&#237;&#238;...");
     Timer1.Enabled:=False;
     ReadData;
   end else begin
     AddStringToListBox(IntToStr(DialResult)+" &#206;&#248;&#232;&#225;&#234;&#224; &#239;&#240;&#232; &#237;&#224;&#225;&#238;&#240;&#229; &#237;&#238;&#236;&#229;&#240;&#224;...");
     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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.047 c
1-1107518124
NightStranger
2005-02-04 14:55
2005.02.20
Создание элемента "из воздуха"


1-1107862267
NightStranger
2005-02-08 14:31
2005.02.20
Проблемка с ListBox


14-1106846392
Бугага
2005-01-27 20:19
2005.02.20
Колосков подал в отставку с поста РФС


1-1107760505
Homa_Programer
2005-02-07 10:15
2005.02.20
инсталлятор


14-1107154888
Ozone
2005-01-31 10:01
2005.02.20
Пенсионный фонд