Главная страница
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.059 c
4-1094996368
Sem
2004-09-12 17:39
2004.10.17
Перекодировка DOS -> Windows и обратно


1-1096529915
Pontic
2004-09-30 11:38
2004.10.17
MDI-форма в dll


1-1096825695
RedDragon
2004-10-03 21:48
2004.10.17
Как мне присвоить текст сделанной строки...


1-1096541673
klerk
2004-09-30 14:54
2004.10.17
Про Excel


3-1095619050
Dio
2004-09-19 22:37
2004.10.17
Компанент