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

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

Почему такое бывает


Страницы:   1 2 3 4

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-07 16:58:00) [21]


>    function Connect:integer;external 'Project2.dll' name
> 'Connect';
>    function Connect1:integer;external 'Project2.dll' name
> 'Connect1';
>


А это чего такое ?


r.o.o.t   (2007-11-07 16:57:00) [22]

щас даю код


sniknik   (2007-11-07 16:57:00) [23]

> всеравно виснет
и это все что ты сделал? из того что я написал.

p.s. вот это сразу поменяло смысл нашего общения.


Сергей М.   (2007-11-07 16:56:00) [24]


> r.o.o.t   (07.11.07 16:53) [47]


Убери колбэки, убери ВСЕ лишнее,т приведи результ.код, а там посмотрим ...


r.o.o.t   (2007-11-07 16:53:00) [25]

sniknik ©   (07.11.07 16:48) [41]
> почему виснет весь COM в системе
procedure test.Execute;
begin
Excec_proc1;
while not Terrminated do
   sleep(30);
Excec_proc2;
end;
всеравно виснет

Сергей М. ©   (07.11.07 16:49) [42] вот код который незагружает планировщик проблема остается почему??


sniknik   (2007-11-07 16:53:00) [26]

> но суть остается преждней....
суть меняется с каждым измененным/добавленным фактом...

сравни.
комп ни с того ни сего перестал работать. почему?

уронил на комп гирю в 24кг и он перестал работать. почему?


sniknik   (2007-11-07 16:51:00) [27]

и еще кстати проверка, без которой все выше бессмысленно, сделать Excec_proc1; Excec_proc2; для основного потока, добиться работы при их вызове. (и форму тогда не надо создавать, главную подставить)


Сергей М.   (2007-11-07 16:51:00) [28]


> я просто нестал описывать


Ну раз ты в них непокобелимо уверен, продолжай париться)


r.o.o.t   (2007-11-07 16:49:00) [29]

да я просто нестал описывать их но суть остается преждней....


Сергей М.   (2007-11-07 16:49:00) [30]


> дай пару реализаций  вызова процедур из потока


Что значит "дай" ?! Да еще и "пару" ?)

Вызов процедуры - он и в Африке вызов процедуры. Иначе как не из потока процедуру вызвать невозможно)


sniknik   (2007-11-07 16:48:00) [31]

> почему виснет весь COM в системе

сделай пример (далее смутно, обьяснить трудно (давно с мидас не работал), просто проверь, все вместе и если заработает поодиночке)

1 не трогай SIGNAL извне, лучше вообще убери
2 SrvConnection сделай переменной класса, лучше приватной чтобы доступа извне не было
3 TSocketConnection.Create(nil); вместо nil подставь форму, форму сделай тут же в потоке (локальная переменная)
4 назначь парентом у SrvConnection туже созданную форму.
5 закоментарь SrvConnection.SupportCallbacks:=true;
6 вставь в Execute "пустышку" типа
procedure test.Execute;
begin
 Excec_proc1;
 while not Terrminated do
    sleep(30);
 Excec_proc2;
end;

(CoInitialize/... в принципе можно убрать)

так не виснет?


Сергей М.   (2007-11-07 16:47:00) [32]


> в момент вызова процедур к MIDAS


К тому же в приведенном тобой шматке кода нет ни намека на такие вызовы.


r.o.o.t   (2007-11-07 16:47:00) [33]

тем самы освобаждая планировщик....

ок дай пару реализаций  вызова процедур из потока


Сергей М.   (2007-11-07 16:44:00) [34]


> почему все прекрасно работает только в момент вызова процедур
> к MIDAS


Потому что при ожидании ответа апп-сервера на запрос транспортный поток, созданный компонентом. переходит в kernel-time.

Исходники компонента Борланд предоставил для тебя, а не для Пушкина)


r.o.o.t   (2007-11-07 16:41:00) [35]

в частности виснет COM


r.o.o.t   (2007-11-07 16:40:00) [36]

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


Сергей М.   (2007-11-07 16:35:00) [37]


> почему виснет весь COM в системе


Потому что у тебя совершенно бестолковый цикл в методе Execute, беспардонно отжирающий у планировщика уйму квантов времени, ничего полезного при этом не делая.


> SIGNAL.Strings[0]; итак глобальная переменна


Какого же лешего ты не синхронизируешь мультипоточные обращения к этому ресурсу ?


r.o.o.t   (2007-11-07 16:23:00) [38]

1. в данном куске кода необрабатываются CallBack но он необходим
2. сервер находится на удаленной машине функционирует нормально...
3. MIDAS  использует COM
4. SIGNAL.Strings[0]; итак глобальная переменная но доступ к ней из одного птока вызов происходит через
  Procedure test.Input_proc1(s:string);
 begin
   SIGNAL.Add(s);
 end;
где s =1 или 2 по данным значиниям вызываются proc1 proc2


Вопрос почему виснет весь COM в системе


Сергей М.   (2007-11-07 16:18:00) [39]


> он с COM и не работает


Почем я знаю, работает он с СОМ или не работает ?)
Бросил огрызок кода и сидит ждет у моря погоды)

Во-первых, неизвестно где находится и что делает его апп-сервер, может он на той же машине и в нем черт-те что и сбоку бантик ..

Во-вторых, неизвестно обрабатываются ли колбэки и как обрабатываются ...


sniknik   (2007-11-07 16:15:00) [40]

> Procedure test.Out_proc1;
>   begin
>       form1.Button1.Caption:='вот';
>       form1.Update;
>    end;
вот еще к первому замечанию.


Страницы:   1 2 3 4

Наверх

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