整容说文库 > 程序代码 > 教育资讯

救命哪!!!!关于线程时间控制的东东在下真的没办法了:-~(

来源:学生作业帮助网 编辑:整容说文库 时间:2021/01/28 07:36:26 程序代码
救命哪!!!!关于线程时间控制的东东在下真的没办法了:-~(程序代码
问题倒是很简单,就是用VC写一个程序,对一个用C写的算法程序进行测试,看它能在规定时间内出结果!

因为需要用多线程(十个左右)运行同一C程序,简单的在线程内计算出时间间隔,线程内互相抢CPU,这样测出的时间不是它单独运行时的真正时间了.

如果多加一个线程进行时间间隔的监控,我就不知道,是否会因为多线程间内互抢CPU的关系,而使得监控不准确?望告知.......用GetTickCount?WaitSingalObject?汗......

再说对于那些超时的线程,用TerminateThread,会造成不对其进行任何回收,如果测试的算法程序不止一个,这些未回收的东东会不会对程序及系统资源有什么影响?

有哪位仁兄给个解决的办法啊,555555555555555

主要是时间上的测量.

如果有源代码就更好,谢了先: )   adamfh@163.com





GetThreadTimes可以得到线程占用CPU的时间
用定时器内核对象试试。。
能否给个实例,在<<Adavanced Windows>>里面倒是有个这样的例子,便这个函数的的输出中,线程结束的值老是160X年1月1日,不知是因为什么原因,汗.......

请赐教......

具体的参数意义
BOOL GetThreadTimes(
  HANDLE hThread,             
  LPFILETIME lpCreationTime,  // 线程创建时间
  LPFILETIME lpExitTime,      // 线程退出时间(线程还在运行时没意义)
  LPFILETIME lpKernelTime,    // 线程执行操作系统代码时间
  LPFILETIME lpUserTime       // 线程执行应用程序代码时间
);
GetThreadTimes这个函数我用了后,不知为什么lpExitTime这个变量的值经FiletimetoSystemtime转换为Systemtime后的值是1601年1月1日,难道线程没有结束吗?

因为这个,我就不知道线程停止的时间,我也就无法得知算法程序实际运行的时间

汗。。。。。。。。。

赐教啊。。。。。。。。。
先要用FileTimeToLocalFileTime()转换一下
用多线程的方法测试,误差一定会有的,但是应该并不是很大,在Intel 奔腾时代应该是
每秒钟能完成500次的线程切换,现在的CPU速度更快了,我想切换的次数一定远远大于500次了,所以另开一个线程用GetThreadTime来测试算法的运行时间方法还是可行的!

呵呵……上面是俺的个人意见,愿意听取各位的不同意见!
“对一个用C写的算法程序进行测试,看它能在规定时间内出结果!”
既然要得到精确时间,为什么还要多线程?如果是把多个线程作为一个整体测时间,那为什么还要分别测每个线程的时间?你好像说的不是很清楚。:)

我的确是测量过C程序总的运行时间,

但奇怪的是,VC里测量同一个程序(从开始到完毕),和在C环境下测的时间不一致?

汗。。。。。难道我测错了?再测。。。。。不过我认为在DOS环境下和WINDOWS环境下同一算法测出的时间是不一样的!

我使用多线程是为了节省时间,因为要现场进行程序运行时间的测量,且每个程序要测十个数据,每个测试数据限时十秒,有上百个程序需要测量。我要尽可能的节省时间,以免总结果出来得太慢,汗。。。

我把简单的事情想复杂了?。。。。

再想想。。。。

不过话又说回来,单就对多线程进行精确时间测量有什么好方法吗?GetThreadTimes这个函数的lpExitTime(线程退出时间)变量值我一直是默认值,不知为什么?赐教:)
程序代码