نقل قول نوشته شده توسط Mahmood_M مشاهده تاپیک
عرض کردم که برای حل مشکل باید نمونه خروجی رو قرار بدید، مواردی که گفته شد برای جلوگیری از مشکلات دیگه ست
سورس دستور WriteLog رو قرار بدید، احتمالا مشکل در این دستور ایجاد میشه
از این دستور در چند ترد به صورت همزمان استفاده کردید، بنابراین باید Synchronization رو رعایت کنید، مثلا باید از CriticalSection استفاده کنید
راه درست برای نوشتن Log اینه که یک صف ( مثلا یک StringList ) از خطوطی که باید در لاگ نوشته بشه داشته باشید و هر ترد فقط متن مورد نظرش رو در داخل این صف قرار بده و در یک ترد جداگانه این لیست پیمایش بشه و در فایل Log نوشته بشه. برای ثبت متن Log از درون هر ترد باز باید از CriticalSection استفاده کنید یا اینکه از کلاسهای Thread-Safe مثل TThreadList استفاده کنید که مخصوص همین کار ایجاد شدن و به صورت داخلی Synchronization رو مدیریت می کنن
کد writelog را خیلی وقت پیش نوشته ام و توی یک Unit دیگر است این هم کدش:

procedure WriteLog(eDesc:string; eLocation: String=''; UseMiladiDate:boolean=False);
var
Y,M,D:Word;
Dir,tFileName,LineL:String;
tFile:TextFile;
begin
if not UseMiladiDate then
DecodeDateShamsi(Y,M,D)
else
DecodeDate(Now,Y,M,D);
Dir:=AppPath+FIX_STR_LEN(IntToStr(Y),4)+'\';
if not DirectoryExists(Dir) then CreateDir(Dir);
Dir:=Dir+FIX_STR_LEN(IntToStr(M),2)+'\';
if not DirectoryExists(Dir) then CreateDir(Dir);
tFileName:=Dir+FIX_STR_LEN(IntToStr(D),2)+'.log';
AssignFile(tFile,tFileName);
if not FileExists(tFileName) then
Rewrite(tFile)
else
Append(tFile);
if eLocation<>'' then
LineL:=FIX_STR_LEN(IntToStr(Y),4)+'/'+FIX_STR_LEN(IntToStr(M),2)+'/'+FIX_STR_LEN(IntToStr(D),2)+' '+FormatDateTime('HH:MM',Time)+' '+eDesc+' in '+eLocation
else
LineL:= FIX_STR_LEN(IntToStr(Y),4)+'/'+FIX_STR_LEN(IntToStr(M),2)+'/'+FIX_STR_LEN(IntToStr(D),2)+' '+FormatDateTime('HH:MM',Time)+' '+eDesc;
Writeln(tFile,LineL);
CloseFile(tFile);
end;

به نظر شما اگر اشکال از Log باشه، از CodeSite هم استفاده کنم ممکنه این مشکل پیش بیاد؟