Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.02;
Скачать: 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 вся ветка

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

Наверх




Память: 0.47 MB
Время: 0.044 c
2-1149676222
Ivolg
2006-06-07 14:30
2006.07.02
Замена


1-1148290916
Juice
2006-05-22 13:41
2006.07.02
ShowModal в DataModule.OnDestroy


2-1149857266
webpauk
2006-06-09 16:47
2006.07.02
Установить курсор на кнопку


2-1149914431
dimodimz-FurYzzZ
2006-06-10 08:40
2006.07.02
Сумма элементов ячейки в таблице


2-1149830887
VitV
2006-06-09 09:28
2006.07.02
DBGrid перенос строк