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

Вниз

Дин. массив в потоке   Найти похожие ветки 

 
Романов Р.В. ©   (2003-12-09 12:04) [0]

Имеется такой класс

TTiList = class
FTiValue: array of Single;
FTiDost: array of Byte;
FCount: Integer;
FDirName: String;
private
function GetTiValue: Single;
public
constructor Create(DirName: string);
procedure Load;
property TiValue: Single read GetTiValue;
end;CODE>

В процедуре Load должен считываться файл в массив FTiValue.
В то же время по значениям массива FTiValue отрисовывается Virtual ListView.
Я хочу сделать чтение данных из файла файла в отдельном потоке.
Для этого нужно объявить
threadvar FTiValue: array of Single;

В хелпе имеется такой текст
Dynamic variables that are ordinarily managed by the compiler—long strings, wide strings, dynamic arrays, variants, and interfaces—can be declared with threadvar, but the compiler does not automatically free the heap-allocated memory created by each thread of execution. If you use these data types in thread variables, it is your responsibility to dispose of their memory. For example,
threadvar S: AnsiString;
S := "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
...
S := ""; // free the memory used by S


Вопрос вот в чем, могу я работать с переменной FTiValue как с обычным динамическим массивом и нужно ли обнулить (задать нулевую длинну) в конце работы с ним?


 
MBo ©   (2003-12-09 12:49) [1]

На мой взгляд, лучше обеспечить блокировку доступа к массиву (например, с помощью критической секции или мьютекса), подобно тому, как сделано в TThreadList


 
Романов Р.В. ©   (2003-12-09 13:09) [2]

А чем это лучше?


 
MBo ©   (2003-12-09 13:22) [3]

Исключается одновременный доступ к нетривиальной структуре данных - с изменяемой длиной, местонахождением в памяти и со счетчиком ссылок.

threadvar же представляет собой копии переменной для каждого потока - в данном случае, насколько я понимаю - нонсенс.



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

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

Наверх




Память: 0.47 MB
Время: 0.019 c
1-62046
nester
2003-12-05 02:08
2003.12.19
Как поместить компоненту на заголовок окна?


1-62051
PVOzerski
2003-12-05 18:29
2003.12.19
Проблема с TreeView, или почему приходится


3-61968
bSava
2003-11-26 10:38
2003.12.19
Как сделать Backup на клиентскую машину.


1-62057
go
2003-12-05 17:14
2003.12.19
Вычисления


1-62008
Multy
2003-12-06 18:31
2003.12.19
Сравнение кусков текста