1.可以在每个线程中动态创建一个Session, 多线程时最好使用Session2.虽然有其它方法强制结束线程,但都太过毒辣,所以建议你还是用Terminated属性吧, 这样比较安全, 你只要在线程循环中检测这个属性值就行了.3.OnTerminate := ThreadDone; 这句不是将ThreadDone的返回值赋给OnTerminate, 而是将ThreadDone这个过程指针赋给OnTerminate, 也就是说OnTerminate是个过程变量,它能保存过程指针,赋值以后OnTerminate成了与ThreadDone一模一样的一个过程了.这种方法是Delphi事件机制的关键,如果你做过Delphi控件,你就会对此深有体会了.4.你可以在线程中或主程序中设一个变量,当线程建立时,取出当时的时间(最好用GetTickCount()它精确到毫秒),当线程结束时,再取一次,相减即为运行时间.

解决方案 »

  1.   

    3/demo中给的例子,有这么一句话:
        OnTerminate := ThreadDone是 线程结束 事件
      

  2.   

    4,GetTickCount并不准确,应为 多线程下你更本就不知道该语句何时调用
    在nt ,2000下有getthreadtimes;
      

  3.   

    4,GetTickCount并不准确,应为 多线程下你更本就不知道该语句何时调用
    在nt ,2000下有getthreadtimes;
      

  4.   

    1/如何动态创建session呢?请帮我给出简单的例子;
    4/我的意思是:假如我用一个nmhttp.get方法,这个方法可能会一直占用10秒钟时间,我希望有一个label能像时钟一样一秒一次改变label。但是由于get方法占用了系统进程,所以用gettickcount方法是不可能的。相信老师们对这个问题比较有心得。
      

  5.   

    一般我们用gettickcount()或timegettime()来判断代码执行时间(在16位)
    但在多线程的环境下,用以上方法会有偏差(系统有可能把CPU时间片分给别的进程) 我想可以用 getthreadtime()它可以提供详细时间信息,声明如下:
    function getthreadtime(hthread:thandle; var lpcreationtime,lpexittime,lpkernrltime,lpusertime:tfiletime):bool;stcall;
      
      我知道就这么多!:) 大家多多指教!