![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Тормазит главная форма....
r.o.o.t © (2007-10-05 12:00:00)Господа подскажите я использую TSocketConnection но на слабых каналах свзяи тормазит все страшно в том числе и интерфей программы вынес TSocketConnection в Поток TTread
обращение к интефесу программы главной форме происходит
через Synchronize
тормаза остаются как быть как обстрагировать главную форму от TSocketConnection
Anatoly Podgoretsky (2007-10-05 17:54:00) [1]> r.o.o.t (05.10.2007 12:43:02) [2]
Архангельского начитался?
Сергей М. (2007-10-05 13:37:00) [2]
> допустим убрал
> что дальше??
Дальше некуда - "тормоза" должны исчезнуть.
> примерную блок схему
Действуй по той же схеме, по которой действуешь в [9]
r.o.o.t (2007-10-05 13:33:00) [3]дай примерную блок схему как мне организовать вызовы процедур в потоке и чтоб они возвращали результать на форму без тормажений
на моем примере хотяб приблизительно.....
плиз
r.o.o.t (2007-10-05 13:30:00) [4]ну допустим убрал
что дальше??
Сергей М. (2007-10-05 13:25:00) [5]Убирай Exec_InitSrvConnection, Exec_GetSrvUserList, Exec_SrvPing из основного потока.
r.o.o.t (2007-10-05 13:18:00) [6]так правлено или нет
пробую всерано замирает окно и ждет??
Palladin (2007-10-05 13:16:00) [7]уже гораздо разумней
r.o.o.t (2007-10-05 13:03:00) [8]т.е. типа вот так???
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 12:59:00) [9]Ээ нет... я так убьюсь...
хинт: исполняй в синхронизе только то что касается вывода на форму остальное перенеси в контекст потока
r.o.o.t (2007-10-05 12:55:00) [10]хорошь глумится
дай пример как делать правлено??
Palladin (2007-10-05 12:53:00) [11]Стенку видишь? (c)
r.o.o.t (2007-10-05 12:51:00) [12]чего делать??
Сергей М. (2007-10-05 12:47:00) [13]Тормоза у тебя из-за того что обращение к объекту SrvConnection.AppServer осуществляется в основном потоке.
Palladin (2007-10-05 12:45:00) [14]молодца...
r.o.o.t (2007-10-05 12:43:00) [15]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;
Сергей М. (2007-10-05 12:10:00) [16]Показывай код ..