早就有人说过,调试多线程程序是挑战。今天我才算是对这句话有个比较深入的了解。事情这样的:我的程序有一个工作线程不停的读取USB口上传的数据,然后将读到的数据导出到文本文件。用户反映导出的数据有部分丢失,于是我就修改读取数据的方式,并在收到数据的时候做了前后两笔数据ID是否连续的判断,还把数据通过OutputDebugString输出到VC6的Debug输出窗口。奇怪的是,每当我调整VC IDE左边的Workspace窗口的大小后,ID就不连续了,用BusHound抓到的数据ID是连续的啊!
然后我猜测,这都是因为OutputDebugString这个函数惹的祸,调整Workspace窗口大小后,VC的Debug输出窗口也要重画嘛,既然是重画,就需要时间,而在等待重画的这段时间内,USB口上传的数据就像手中沙一样随时间流失了。So,虽然OutputDebugString简单方便,但也不是完全无毒无副作用。