|
Тема |
Пак нишки (memory leak) |
|
Автор |
NikB (любопитен) |
|
Публикувано | 26.11.05 19:41 |
|
|
Пак нишки (memory leak)
Създвам си някакъв наследник на tThread, който в конструтора си прави нещо и установява някакъв флаг (допълнително пропърти).
Нишката не се стартира при създаване (CreateSuspended=true)
Малко след това проверявам флага и ако не ми харесва, не стартирам нишката, а я унищожавам с FreeAndNil.
Е, според MemCheck, така ми се губят 8 байта в:
Unit Systems
function BeginThread(SecurityAttributes: Pointer; StackSize: LongWord;
ThreadFunc: TThreadFunc; Parameter: Pointer; CreationFlags: LongWord;
var ThreadId: LongWord): Integer;
var
P: PThreadRec;
begin
New(P); /////// ЕТО ТУКА !!!!!!!!!!!!!!!
P.Func := ThreadFunc;
P.Parameter := Parameter;
IsMultiThread := TRUE;
Result := CreateThread(SecurityAttributes, StackSize, @ThreadWrapper, P,
CreationFlags, ThreadID);
end;
Ако си стартирам нишката и си я унищожа,
когато си свърши работата (пак с FreeAndNil),
всичко е ОК.
Мисля си, че това P се ползва при създаване и в някой момент делфито го освобождава, но аз не го оставям да стигне до тоя момент (унищожавам му притежателя предварително)
Та ако има забележки, идеи и всякакви предложения - ще съм благодарен пак :)
ПП
Нормално си минава през всички деструтори и заетата от мен памет си се освобождава - както е видно и от мястото на memory leak-a<P ID="edit"><FONT class="small"><EM>Редактирано от NikB на 26.11.05 19:42.</EM></FONT></P><P ID="edit"><FONT class="small"><EM>Редактирано от NikB на 26.11.05 19:43.</EM></FONT></P><P ID="edit"><FONT class="small"><EM>Редактирано от NikB на 26.11.05 19:44.</EM></FONT></P>Редактирано от NikB на 26.11.05 19:45.
|
| |
|
|
|