Вниз
Скачать: CL | DM;

Правильное ведение лога с использованием нитей   Найти похожие ветки 

 
learner ©   (2006-06-11 19:26) [0]

Пытаюсь вести лог ошибок.
Никак не получаеться записывать с использованием нитей.
Пишет в файл ерунду. Я понимаю, что память, на которую ссылаеться нить
изменяется. Но почему и как это можно избежать ?
function Str_AddToFileThread(const pValue:PChar):DWord; stdcall;
begin
Result:=0;
EnterCriticalSection(ERR_CS);
try
 Str_AddToFile(TestFile,pValue);  // Добавляет строку к файлу
finally
 LeaveCriticalSection(ERR_CS);
end;
end;

procedure SetThreadError(const Mess:string);
var
ThreadHand, ThreadID:DWord;
begin
try
 ThreadHand:=CreateThread(nil,0,@Str_AddToFileThread,PChar(Mess),0,ThreadID);
 if ThreadHand<>0 then CloseHandle(ThreadHand);
finally
end;
end;

procedure Test;
var
i:integer;
begin
for i:=0 to 1000 do
 SetThreadError("string"+IntToStr(i)); // Пишет ерунду
//  Str_AddToFile(TestFile,"string"+IntToStr(i));// Пишет нормально
end;


 
Dmitrij_K   (2006-06-11 22:00) [1]

Ну например так
function Str_AddToFileThread(const pValue:PChar):DWord; stdcall;
begin
Result:=0;
//EnterCriticalSection(ERR_CS);
try
// Str_AddToFile(TestFile,pValue);  // Добавляет строку к файлу
finally
// LeaveCriticalSection(ERR_CS);
StrDispose(pValue)
end;
end;

procedure SetThreadError(const Mess:PChar);
var
ThreadHand, ThreadID:DWord;
begin
try
ThreadHand:=CreateThread(nil,0,@Str_AddToFileThread,Mess,0,ThreadID);
if ThreadHand<>0 then CloseHandle(ThreadHand);
finally
end;
end;

procedure Test;
var
i:integer;
p:PChar;
s:sTRING;
begin
 for i:=0 to 1000 do
 begin
   s := "string"+IntToStr(i);
   p := StrNew(PChar(s));
   SetThreadError(p); // Пишет ерунду
 end;
end;


 
learner ©   (2006-06-11 23:24) [2]

Dmitrij_K   (11.06.06 22:00) [1]
Получилось.
Спасибо бльшое !



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

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.025 c
2-1149857266
webpauk
2006-06-09 16:47
2006.07.02
Установить курсор на кнопку


3-1147101888
__alex
2006-05-08 19:24
2006.07.02
Есть ли в Paradox каскадное удаление?


15-1149139763
Ega23
2006-06-01 09:29
2006.07.02
С Днём рождения! 1 июня


6-1140291759
Jimmy
2006-02-18 22:42
2006.07.02
Игра под модем


1-1148471649
nester
2006-05-24 15:54
2006.07.02
Как узнать/поменять владельца и права доступа к файлам на ntfs




   Наверх