Текущий архив: 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.49 MB
Время: 0.049 c