Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Борьба с "Подвисанием" [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() в доп.трэд


Наверх

Титульная страница Поиск, карта сайта Написать письмо