Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.07.02;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.44 MB
Время: 0.01 c
4-1143609029
MiHoY
2006-03-29 09:10
2006.07.02
перехват сообщений TWebBrowser


2-1150394396
Тимофей Юрьевич
2006-06-15 21:59
2006.07.02
не заню как и назвать;)


2-1149847180
VitV
2006-06-09 13:59
2006.07.02
Хранения данных в из DBRichedit.


1-1148461081
Aleksandr.
2006-05-24 12:58
2006.07.02
Где можно почитать о вызовах dll, написанных на Delphi, в VB?


4-1143701094
V.exeR
2006-03-30 10:44
2006.07.02
В IE надо перехватывать добавление страницы в "избранное"...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский