Главная страница
    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.46 MB
Время: 0.039 c
4-1105121060
Oddin
2005-01-07 21:04
2005.02.20
Процессор


14-1106730702
ghg
2005-01-26 12:11
2005.02.20
переход от процедуры к реализации этой процедуры


4-1104843979
Qware
2005-01-04 16:06
2005.02.20
Серийный номер мат. платы


14-1106953523
GanibalLector
2005-01-29 02:05
2005.02.20
Набережных С. - мастер!


14-1107338274
syte_ser78
2005-02-02 12:57
2005.02.20
блин!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский