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

Вниз

Почему повисает MIDAS-сервер при попытке сделать такое:   Найти похожие ветки 

 
Aleksandr ©   (2003-04-11 19:37) [0]

На RemoteDataModuleCreate пишу:
begin
 MainForm.IncConnectCount
end;

procedure MainForm.IncConnectCount;
begin
 FCCount:=FCCount+1;
 MainForm.StatusBar.Panels[0].Text:=IntToStr(FCCount)
end;

И все. На этом форма умирает (при этом кнопочка "закрыть" в Caption остается доступна и закрывает программу при нажатии). То же происходит, если попытаться какой нибудь Label.Caption присвоить string из того же метода... Какие-то тут условности есть?


 
Набережных С.   (2003-04-13 09:34) [1]

Если потоковая модель <> Single:

procedure MainForm.IncConnectCount;
begin
 InterlockedIncrement(FCCount);
 PostMessage(Handle, UM_RefreshStatus, 0, 0);
end;

procedure MainForm.UMRefreshStatus(var Message: TMessage);
begin
 MainForm.StatusBar.Panels[0].Text:=IntToStr(FCCount)
end;


 
Aleksandr ©   (2003-04-14 12:24) [2]

Спасибо! А что делать в случае со строковыми переменными?


 
ErikIvanov   (2003-04-14 12:39) [3]

Например так.
procedure SendStatus(const Value: String);
Var Str: PChar;
begin
Str := StrNew(PChar(Value));
PostMessage(Application.Handle,msgChangeMessage,0,Integer(Str));
end;

procedure ReciveStatus(Var Value: String; Msg: TMessage);
var Str: PChar;
begin
Str := PChar(Msg.lParam);
Value := Str;
StrDispose(Str);
end;
Или записать в переменую и спокойно в UMRefreshStatus считать. Если хочется очень коректно то можно с TCriticalSection


 
Aleksandr ©   (2003-04-14 14:06) [4]

Спасибо. Только опять мне глупому, немного неясно - а почему через PChar все должно быть? Чем строка не плоха?


 
Набережных С.   (2003-04-14 18:28) [5]

>Aleksandr ©   (14.04.03 14:06)

Для AnsiString поддерживается механизм подсчета ссылок. Как только счетчик обнуляется, строка освобождается. Т.е. строка "умрет" при выходе из SendStatus и в момент получения сообщения на ее месте в памяти могут быть совсем другие данные.
 На всякий случай попутно предупрежу, что в конструкторе RemoteDataModule для связи с главным потоком нельзя использовать синхронные механизмы из-за применения семафора в методе TComponentFactory.CreateInstance, можно только асинхронные.



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

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

Наверх




Память: 0.48 MB
Время: 0.045 c
1-1096549347
roma
2004-09-30 17:02
2004.10.17
Button1 i Button2


1-1096964908
Fishka
2004-10-05 12:28
2004.10.17
"Не показывать больше это окно"


1-1096319571
Black-Grin
2004-09-28 01:12
2004.10.17
Откуда вызывается процедура?


3-1095592312
KADAN
2004-09-19 15:11
2004.10.17
mssql => msaccess


6-1092020633
Максим
2004-08-09 07:03
2004.10.17
Имя компа