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

Вниз

Тормазит главная форма....   Найти похожие ветки 

 
r.o.o.t ©   (2007-10-05 12:00) [0]

Господа подскажите я использую TSocketConnection но на слабых каналах свзяи тормазит все страшно в том числе и интерфей программы вынес TSocketConnection в Поток TTread
обращение к интефесу программы главной форме происходит
через Synchronize
тормаза остаются как быть как обстрагировать главную форму от TSocketConnection


 
Сергей М. ©   (2007-10-05 12:10) [1]

Показывай код ..


 
r.o.o.t ©   (2007-10-05 12:43) [2]

Procedure TCoreTread.Exec_InitSrvConnection;
begin
 try

  IPPort:=Exec_InitSrvConnection_IP_Port;
  IPAddres:=Exec_InitSrvConnection_IP_Adrr;
   SrvConnection:= TSocketConnection.Create(nil);
  SrvConnection.Address:=Exec_InitSrvConnection_IP_Adrr;
  SrvConnection.Port:=Exec_InitSrvConnection_IP_Port;

  SrvConnection.ServerGUID:="{AC69FABC-4752-4CF2-99E9-85CE86F99172}";
  SrvConnection.SupportCallbacks:=true;
  SrvConnection.LoginPrompt:=false;
  SrvConnection.Open;
  Exec_GetFile_FileList:=TStringList.Create;
  ContactUsersList:=TStringList.Create;
  InitSrvConnection:=true;
Except
end;
end;

rocedure TCoreTread.Exec_GetSrvGroupList;
Var
  StrucGroupList:WideString;
  i:integer;
  s:string;
  Struc:TStringList;
  MyTreeNode1      : TTreeNode;
  MyTreeNode2      : TTreeNode;

begin
 try
  Struc:=TStringList.Create;
  Struc.Text:=CAST5_Dicoding(
                             SrvConnection.AppServer.GetUserGroup(
                             CAST5_Encoding(Exec_GetSrvGroupList_RegionN,KeyHash),
                             CAST5_Encoding(Exec_GetSrvGroupList_RaionN,KeyHash)),
                             KeyHash);
     frMain.UserTree.Items.BeginUpdate;
     frMain.NodeProcess:=true;
     node1.DeleteChildren;
     for i := 0 to Struc.Count - 1 do
     begin
      MyTreeNode1:=frMain.UserTree.Items.AddChild(Node1,Struc.Strings[i]);
      MyTreeNode1.ImageIndex:=1;
       MyTreeNode2:=frMain.UserTree.Items.AddChild(MyTreeNode1,"Loading...");
     end;

     frMain.UserTree.Items.EndUpdate;
  Struc.Free;
 except
 end;
  Exec_GetSrvGroupList_RaionN:="";
  Exec_GetSrvGroupList_RegionN:="";
end;

procedure TCoreTread.Execute;
var
Signal_:string;
begin
 while True do
 begin
if SIGNAL<>nil then
  if SIGNAL.Count>0 then
  begin
    Signal_:=SIGNAL.Strings[0];
    SIGNAL.Delete(0);
  end;

  if SIGNAL_=SIGNAL_GET_SRV_GROUP_LIST then
     Synchronize(Exec_GetSrvGroupList);

  if SIGNAL_=SIGNAL_SRV_USER_LIST then
     Synchronize(Exec_GetSrvUserList);

  if SIGNAL_=SIGNAL_SRV_PING then
     Synchronize(Exec_SrvPing);
............
end;


 
Palladin ©   (2007-10-05 12:45) [3]

молодца...


 
Сергей М. ©   (2007-10-05 12:47) [4]

Тормоза у тебя из-за того что обращение к объекту SrvConnection.AppServer осуществляется в основном потоке.


 
r.o.o.t ©   (2007-10-05 12:51) [5]

чего делать??


 
Palladin ©   (2007-10-05 12:53) [6]

Стенку видишь? (c)


 
r.o.o.t ©   (2007-10-05 12:55) [7]

хорошь глумится
дай пример как делать правлено??


 
Palladin ©   (2007-10-05 12:59) [8]

Ээ нет... я так убьюсь...

хинт: исполняй в синхронизе только то что касается вывода на форму остальное перенеси в контекст потока


 
r.o.o.t ©   (2007-10-05 13:03) [9]

т.е. типа вот так???
rocedure TCoreTread.Exec_GetSrvGroupList;
Var
  StrucGroupList:WideString;
  i:integer;
  s:string;

  MyTreeNode1      : TTreeNode;
  MyTreeNode2      : TTreeNode;

begin
 try
  Struc:=TStringList.Create;
  Struc.Text:=CAST5_Dicoding(
                             SrvConnection.AppServer.GetUserGroup(
                             CAST5_Encoding(Exec_GetSrvGroupList_RegionN,KeyHash),
                             CAST5_Encoding(Exec_GetSrvGroupList_RaionN,KeyHash)),
                             KeyHash);

  Synchronize(UpdateList);
 except
 end;
  Exec_GetSrvGroupList_RaionN:="";
  Exec_GetSrvGroupList_RegionN:="";
end;

Procedure UpdateList;
var
 i:integer;
  s:string;

  MyTreeNode1      : TTreeNode;
  MyTreeNode2      : TTreeNode;
begin
   frMain.UserTree.Items.BeginUpdate;
     frMain.NodeProcess:=true;
     node1.DeleteChildren;
     for i := 0 to Struc.Count - 1 do
     begin
      MyTreeNode1:=frMain.UserTree.Items.AddChild(Node1,Struc.Strings[i]);
      MyTreeNode1.ImageIndex:=1;
       MyTreeNode2:=frMain.UserTree.Items.AddChild(MyTreeNode1,"Loading...");
     end;

     frMain.UserTree.Items.EndUpdate;
  Struc.Free;
end;


 
Palladin ©   (2007-10-05 13:16) [10]

уже гораздо разумней


 
r.o.o.t ©   (2007-10-05 13:18) [11]

так правлено или нет
пробую всерано замирает окно и ждет??


 
Сергей М. ©   (2007-10-05 13:25) [12]

Убирай Exec_InitSrvConnection, Exec_GetSrvUserList,  Exec_SrvPing из основного потока.


 
r.o.o.t ©   (2007-10-05 13:30) [13]

ну допустим убрал
что дальше??


 
r.o.o.t ©   (2007-10-05 13:33) [14]

дай примерную блок схему как мне организовать вызовы процедур в потоке и чтоб они возвращали результать на форму без тормажений
на моем примере хотяб приблизительно.....
плиз


 
Сергей М. ©   (2007-10-05 13:37) [15]


> допустим убрал
> что дальше??


Дальше некуда - "тормоза" должны исчезнуть.


> примерную блок схему


Действуй по той же схеме, по которой действуешь в [9]


 
Anatoly Podgoretsky ©   (2007-10-05 17:54) [16]

> r.o.o.t  (05.10.2007 12:43:02)  [2]

Архангельского начитался?



Страницы: 1 вся ветка

Текущий архив: 2007.10.28;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.018 c
15-1190888082
Cyrax
2007-09-27 14:14
2007.10.28
Авторское право на схему города: пара тонких вопросов...


15-1190978114
infom
2007-09-28 15:15
2007.10.28
Странное поведение BDS 2006


3-1182263931
Tonich
2007-06-19 18:38
2007.10.28
Трансакция


2-1191921383
BOBik
2007-10-09 13:16
2007.10.28
Visible


15-1191409720
PPop
2007-10-03 15:08
2007.10.28
Ну как указать этот Main-Class в файле manifest.mf?