Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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("&#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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.04 c
9-1100346095
Zak3D[@Tm]
2004-11-13 14:41
2005.02.20
Direct3D - Проблема потерянных устройств.


3-1106638613
Vitaliygavrilov
2005-01-25 10:36
2005.02.20
Количество данных в базе данных


14-1107255031
P.N.P.
2005-02-01 13:50
2005.02.20
WinRoute 4.1 - SMTP


3-1106229162
EthernalWonderer
2005-01-20 16:52
2005.02.20
TopRow в DBGrid


1-1107356806
GoZilla
2005-02-02 18:06
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский