Главная страница
    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.44 MB
Время: 0.009 c
2-1150238612
learner
2006-06-14 02:43
2006.07.02
Как отличить PChar от PWideChar ?


2-1149931923
13
2006-06-10 13:32
2006.07.02
активный закладка


2-1150311706
STALKER2
2006-06-14 23:01
2006.07.02
TTreeView


2-1150039565
learner
2006-06-11 19:26
2006.07.02
Правильное ведение лога с использованием нитей


2-1150269485
hgd
2006-06-14 11:18
2006.07.02
FindWindow





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский