Форум: "Corba";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];
ВнизПочему повисает 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 вся ветка
Форум: "Corba";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.036 c