我想新开一个线程,然后在死循环里面不断的通过GetTickCount的值相减来计算可是有两个问题:
1、程序效率低下,新线程的大部分时间浪费在循环上面
2、新线程不能操纵界面来显示时间,只有通过发自定义消息来和主线程通信。不知为什么,我的消息发出去了总是不响应:
   ::PostMessage ( ::GetActiveWindow(),  WM_MY_MESSAGE, (WPARAM)time, 0 );但是我在别的地方测试,我的消息却能够响应。如何解决!?

解决方案 »

  1.   

    降低新线程的优先级,如果只是做个计时器用Timer更合适。
      

  2.   

    ::GetActiveWindow()改成你主窗口的句柄试试,可以把你的主窗口句柄用全局变量保存起来传给线程
      

  3.   

    第二个问题已经明白了,
    ::GetActiveWindow()总是返回空,可能是在静态成员函数里面的原因吧。
    我在创建线程的时候,将主程序句柄传给线程就好了。我不想在OnTimer里面实现该功能,但是又认为这样的线程太费系统资源了。哪位有更优雅的解决方案???
      

  4.   

    你可以在新线程里面设置Sleep时间,不要不停的循环,这样效率利用不高,
    在线程里面完全可以控制显示时间,无论你是工作线程还是界面线程都可以。
    你是工作线程,那么你可以将你的显示控件的指针传递进来,就可以不用传递消息了
      

  5.   

    timer并不浪费cpu资源,它由独立的硬件支持