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

Вниз

Передача строк между потоками приложения   Найти похожие ветки 

 
samum   (2007-02-21 09:26) [0]

Здравствуйте.
Вот встал такой вопрос: в приложении имеется несколько потоков. Каждый из них имеет необходимость передавать строку в главный поток. Пока это реализовано примерно так:

var
 s: string;
 p: pchar;
begin
 self.FreeOnTerminate := true;
 s := "Тестовая строка";
 p := PChar(s);
 PostMessage(Form1.Handle, WM_SAMPLEMESSAGE, integer(p), 0);
end;

Ну, главный поток это ловит и со строкой как с Pchar работает.
Пока проблем не возникало, но вот смутные сомнения меня терзают - не получится ли, что при большом количесвтве таких потоков (учитывая, что каждый из них закрывается после отправки сообщения), в ту область памяти, на которую указывает p будет распределено что-то другое поверх строки? Т.е. вместо строки я получу в главном потоке набор непонятных символов?
Может стоит использовать явно GetMem(p, length(s)+1), а в главном потоке FreeMem вызывать? Подскажите, пожалуйста.


 
MBo ©   (2007-02-21 09:29) [1]

PostMessage не ждет обработки сообщения, поэтому может сложиться ситуация, когда сообщение послано, строка освобождена, а прием состоится позже, и возникнет ошибка обращения к памяти. SendMessage же дождется обработки сообщения, если устроит синхронный режим.


 
evvcom ©   (2007-02-21 09:42) [2]

И судя по всему выдран кусок из метода, где s - локальная переменная. Потому скорее всего в большинстве случаев

> [1] MBo ©   (21.02.07 09:29)
> сообщение послано, строка освобождена, а прием состоится позже

это и происходит, а

> возникнет ошибка обращения к памяти

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



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

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

Наверх




Память: 0.47 MB
Время: 0.115 c
15-1174469649
isasa
2007-03-21 12:34
2007.04.15
Пароль SYSDBA для Interbase?


15-1174296490
Игорь Шевченко
2007-03-19 12:28
2007.04.15
Я люблю подход Unix и не люблю подход Windows


11-1143026595
Unknown Mystic
2006-03-22 14:23
2007.04.15
Задание StateImage для эл-тов TKOLTreeView при создании формы.


2-1174989039
Леонид
2007-03-27 13:50
2007.04.15
Короткий путь DOS


15-1174245266
wl
2007-03-18 22:14
2007.04.15
а где?