新建了一个线程,如何在线程结束后获取它的执行时间?
解决方案 »
- 关于scrollbox控件上有stringgrid控件的焦点问题!着急等待中!!!
- 下载一个文件,如果文件在IE的缓存不存在则从网络下载,否则从IE的缓存加载
- SQL如何实现带进度条的数据库备份和还原
- 分店传数据到总店问题
- dbgrid的导出excel问题
- 可以散分吗?我有8000多分,可我不怎么上来,也不怎么提问,如果可以散我就散些。
- query1排序后数据集不能修改,能么解决?
- ----------挑战极限3--《有关资源文件的问题》---挑战极限3
- 怎样知道给某一指针分配了多大的内存??
- 怎样才能找出光盘上隐藏的文件夹呢?
- 在f1book中,有没有单元格引发事件的?
- 求助!如何在代码窗口中查找变量时不关闭“查找对话框”而可以继续查找。谢谢【D7】
ct,et,kt,ut:_filetime;
systime:_systemtime;
begin
GetThreadTimes(new.Handle,ct,et,kt,ut);
filetimetosystemtime(ct,systime);
Memo1.Lines.Add('create '+format('%2d-%2d-%2d %2d:%2d:%2d',[systime.wyear,systime.wmonth,systime.wday,systime.whour,systime.wminute,systime.wsecond]));
注:systime得到的是格林威治时间
,难道直接用土方法,在线程建立和结束时分别记录当时的时间到变量中?
TThreadParam = packed record
START_TIME: TDatetime; //开始时间
END_TIME: TDatetime; //结束时间
end;在Create时由主线程调用后写入START_TIME,然后在线程的onTermilate事件里再取一次时间,写入到时间结构里END_TIME,相减后就得到了执行的时间差了。
如果时间差很小的话,可以考虑用浮点的形式记录,如:
Format('%9.8f',[TimeNow2-TimeNow1])//TimeNow2和TimeNow1分别表示两次的时间记录
var
vSystemTime: TSystemTime;
vLocalFileTime: TFileTime;
begin
FileTimeToLocalFileTime(AFileTime, vLocalFileTime);
FileTimeToSystemTime(vLocalFileTime, vSystemTime);
Result := SystemTimeToDateTime(vSystemTime);
end; { FileTimeToDateTime }procedure TForm1.Button1Click(Sender: TObject);
var
vCreationTime, vExitTime, vKernelTime, vUserTime: TFileTime;
begin
GetThreadTimes(GetCurrentThread,
vCreationTime, vExitTime, vKernelTime, vUserTime);
Memo1.Lines.Add(DateTimeToStr(FileTimeToDateTime(vCreationTime)));
Memo1.Lines.Add(IntToStr(Int64(vExitTime) * 100 div 1000000000)); //单位为100纳秒,一纳秒=十亿分之一秒
Memo1.Lines.Add(IntToStr(Int64(vKernelTime) * 100 div 1000000000));
Memo1.Lines.Add(IntToStr(Int64(vUserTime) * 100 div 1000000000));
end;