本帖最后由 VisualEleven 于 2014-01-10 19:06:09 编辑

解决方案 »

  1.   

    OnTimer是基于消息队列的,优先级比较低,单核,可能得不到CPU调度,所以消息没有得到处理
      

  2.   


    具体怎么理解呢?
    那为什么多核时就可以得到处理呢?即:在多核环境下,一会运行 Line 2, 一会运行Line 1。
    那为什么单核时的结果不是这样?
      

  3.   

    先执行Line2,还是先执行OnTimer,完全看系统调度。我觉得拿这个来研究多核没有意义。
      

  4.   


    表示怀疑。即使多核的情况下,一个线程也不可能一个处理未处理完毕就启动另一个处理
    窗口线程运行基于消息循环,而消息循环中的DispatchMessage调用窗口过程,窗口过程执行完毕消息才能抽取下一个窗口消息,一个窗口消息未返回,怎么可能能得到WM_TIMER消息?感觉lz观察有误
      

  5.   

    按楼主的观察,在多核下程序就会出错的,比如LIN1没执行完,但LIN2却根据LIN1的结果运行,那么LIN2运行结果肯定是错的
      

  6.   

    同一个线程应该是按顺序执行的,不应该在OnMyButtonClick函数还在执行没有返回的情况下调用OnTimer中去执行
      

  7.   

    你那个Line2该不会回到消息循环了吧?
    while(...)
    {
    getmessage(...)
    ...
    }
    或者说调用了一些COM组件的方法?其实这些方法是在内部跑消息循环(那种单线程套间的COM组件就爱干这种事情)
    ,然后就调度了计时器消息。你在Line1的时候输出一下日志,把调用栈贴出来看看呢?
    如果在执行Line2一半的时候执行了Line1,一会应该还会再回到Line2,也就是说如果确实是同一个线程的话,Line2那个函数应该还在调用栈里面。