我在一个程序的函数中调用了TRACE语句打印了一些信息,形式如下:void  func()
{
    ...    for(int i=0; i<3 ;i++)
    {
       TRACE("....");
     
    }
    ...
}可运行的时候发现,我这个循环明明循环了三次,可有时在输出窗口中却只显示两个TRACE信息,有时又只显示一个。我在TRACE语句中把循环的索引也打印出来了,当只显示两个TRACE信息时,第一条信息显示循环的索引值为1,第二条信息显示循环的索引值为2。可索引值为0的那条TRACE信息哪里去了呢?怎么没显示呢?需要说明的是我这个函数被调用的频率很大很大。我不明白为什么在输出窗口中显示的TRACE个数与实际的个数不匹配呢?有一种说法是说如果TRACE语句调用的速度超过了OUTPUT窗口处理的速度,则会导致TRACE语句丢失。会不会是这个原因呢?再有就是我这是一个多线程程序,会不会是线程跳转导致的呢?

解决方案 »

  1.   

    而且如果是多线程,由于你输出没有并发控制,实际上有些信息丢了很正常,要把TRACE当作共享资源,确保同一个时刻只有一个线程调用
      

  2.   

    刚刚又测试了一下,有时能打印出for循环的第一条,有时能打印出第二三条,刚刚还有一次只打印出了第一条和第三条。呵呵,感觉挺怪异的。我觉得for循环肯定是三次都执行了,但TRACE语句没能输出到OUTPUT窗口。
      

  3.   

    for(int i=0; i <3 ;i++) 
        { 
          
    TRACE("...."); 
    SetSleep100);    
        }