![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Почему такое бывает
r.o.o.t © (2007-11-02 11:48:00)Нород такая проблема просветите.
SrvConnection:= TSocketConnection.Create(nil);
SrvConnection.Address:=Exec_InitSrvConnection_IP_Adrr;
SrvConnection.Port:=Exec_InitSrvConnection_IP_Port;
SrvConnection.ServerName:='BrsServer.BrsServer_Controller';
SrvConnection.ServerGUID:='{AC69FABC-4752-4CF2-99E9-85CE86F99172}';
SrvConnection.SupportCallbacks:=true;
SrvConnection.LoginPrompt:=false;
SrvConnection.Open;
Вот кусок кода создающий TSocketConnection который создается в потоке и конектится на MIDAS сервер трабл заключается в том что весь COM тормазится в системе WinXP т.е. при попытки открытия *.doc *.xls документов они виснут пока из клиента необратишся к интерфейсу сервера(любому) или невыгрузишь прогу....
КАК быть??
ага (2007-11-21 05:03:00) [1]А ежель так?
procedure test.Execute;
var
msg: tmsg;
begin
Excec_proc1;
while GetMessage(...) do dispatchmessage(...)
end
r.o.o.t (2007-11-08 12:52:00) [2]сервак пустой просто RemoteData Modul без процедур и методов
разници нет тормазит как на рабочем так и на тестовом код потока вот
unit Unit2;
interface
uses
Classes,SysUtils,SConnect,ActiveX,Windows;
type
Test = class(TThread)
private
{ Private declarations }
SrvConnection: TSocketConnection;
procedure Execute; override;
Procedure Excec_proc1;
Procedure Excec_proc2;
protected
public
end;
implementation
uses Unit1;
Procedure test.Excec_proc1;
begin
SrvConnection:=TSocketConnection.Create(nil);
SrvConnection.Address:='10.107.46.188';
SrvConnection.Port:=211;
SrvConnection.ServerName:='Project1.test';
SrvConnection.ServerGUID:='{5AD38E74-551A-4D32-BA46-EF5A71D886DF}';
//SrvConnection.SupportCallbacks:=true;
SrvConnection.LoginPrompt:=false;
SrvConnection.Open;
end;
Procedure test.Excec_proc2;
begin
SrvConnection.Close;
end;
procedure test.Execute;
var
Signal_:string;
begin
Excec_proc1;
while true do sleep(30);
end;
end.
Тормаза проявляется следующим способом при открытии допусти документов Excel Word из Outlook или через эксплорер сопровождаются висяками возможно при открытии используеьтся ShellExcute хз выложи свой код тормазит на всех клинтских машинах... где стоит WinXP и Office 2003 проект компилится в D2006
Сергей М. (2007-11-08 08:38:00) [3]
> попробой через Excplorer открыть Excel документ
А причем здесь COM ?
Ёхель в этом случае используется не как COM-сервер, а как обычное приложение.
sniknik (2007-11-07 19:33:00) [4]> пришли свой код
???
"код" я взял из [52] as is, простым копированием, замены которые произвел (ну нет у меня твоего сервера) указаны в [58]. все пробы делались на этом.
r.o.o.t (2007-11-07 18:22:00) [5]еще заметил ососбенность после подключения к серверу подождать 30 40 сек вручную excel запускается нормально и последующие разы тоже после подключения обратится сразу то висяк гдето 50 сек потом открывается и последующие разы открывается нормально но ежели опять вызвать метод сревера опять висяк....
r.o.o.t (2007-11-07 18:14:00) [6]создал голый MIDAS сервер
код переделал
SrvConnection:=TSocketConnection.Create(nil);
SrvConnection.Address:='10.107.46.188';
SrvConnection.Port:=211;
SrvConnection.ServerName:='Project1.test';
SrvConnection.ServerGUID:='{5AD38E74-551A-4D32-BA46-EF5A71D886DF}';
//SrvConnection.SupportCallbacks:=true;
SrvConnection.LoginPrompt:=false;
SrvConnection.Open;
всеравно виснет
r.o.o.t (2007-11-07 17:58:00) [7]если да где может быть проблема??
r.o.o.t (2007-11-07 17:57:00) [8]пришли свой код
данная проблема на всех клиентах
у тебя подключение держиться??
sniknik (2007-11-07 17:54:00) [9]руками все работает, и оболочка, и ексель и ворд, и если документ открываешь, и тыкая на него из проводника и отрывая в оболочке. (т.е. подозреваю по любому)
т.е. то что у тебя "вешает" до сих пор "за кадром".
r.o.o.t (2007-11-07 17:49:00) [10]кончно создай документ ворд или есель и попробуй его открыть руками а не саму оболчку
кстате Excel:= CreateOleObject('Excel.Application'); работает а вот пр окрытии руками неработает ваще запутался
sniknik (2007-11-07 17:44:00) [11]> а ты что пробовал??
> CreateOleObject('Excel.Application');
Excel:= CreateOleObject('Excel.Application');
Excel.Visible:= true
> попробой через Excplorer открыть Excel документ
руками открывал ворд, есть разница?
r.o.o.t (2007-11-07 17:43:00) [12]заменил
SrvConnection.Address:='127.0.0.1';
запустил сервер локально висит
r.o.o.t (2007-11-07 17:41:00) [13]а ты что пробовал??
CreateOleObject('Excel.Application');
попробой через Excplorer открыть Excel документ
sniknik (2007-11-07 17:38:00) [14]r.o.o.t (07.11.07 17:00) [52]
проверил. не висит.
замены
SrvConnection.Address:='127.0.0.1'; //свой комп
SrvConnection.ServerName:='GDBServer.GDBMetods'; //свой сервер
SrvConnection.ServerGUID:='{384C6DAA-75AC-4E11-94EE-18443EB220C8}';
r.o.o.t (2007-11-07 17:17:00) [15]висяяяк
r.o.o.t (2007-11-07 17:16:00) [16]даа
попробуй открыть эксель или отлюк или любую программу которое использует com или ole
Сергей М. (2007-11-07 17:08:00) [17]
> виснет
т.е. ты утверждаешь, что ф-ция
CreateOleObject('Excel.Application');
будучи вызванная после [54], не возвращает управления и намертво блокирует вызвавший ее поток ?
r.o.o.t (2007-11-07 17:02:00) [18]поток создаю вот так
Testq:=Test.Create(false);
Testq.Priority:= tpIdle;
r.o.o.t (2007-11-07 17:01:00) [19]виснет
r.o.o.t (2007-11-07 17:00:00) [20]unit Unit2;
interface
uses
Classes,SysUtils,SConnect,ActiveX,Windows;
type
Test = class(TThread)
private
{ Private declarations }
SrvConnection: TSocketConnection;
procedure Execute; override;
Procedure Excec_proc1;
Procedure Excec_proc2;
protected
public
end;
implementation
uses Unit1;
Procedure test.Excec_proc1;
begin
SrvConnection:=TSocketConnection.Create(nil);
SrvConnection.Address:='80.69.155.66';
SrvConnection.Port:=211;
SrvConnection.ServerName:='BrsServer.BrsServer_Controller';
SrvConnection.ServerGUID:='{AC69FABC-4752-4CF2-99E9-85CE86F99172}';
//SrvConnection.SupportCallbacks:=true;
SrvConnection.LoginPrompt:=false;
SrvConnection.Open;
end;
Procedure test.Excec_proc2;
begin
SrvConnection.Close;
end;
procedure test.Execute;
var
Signal_:string;
begin
Excec_proc1;
while true do sleep(30);
end;
end.