今早在调试自己手头一个项目的时候,突然发现它不能正常工作了。现象非常奇怪。在这个项目中我使用了临界区来控制线程的同步,结果在进入临界区时出错。
临界区的使用详解,请参考网上相关资料,或本人前面的一篇关于临界区的日志。该项目主要代码如下:






































































从代码来看,除了构造函数中曾经忘记释放临界区对象资源外,没有发现其他异常。
后来我仔细看了看我调用该类的地方:


















发现如果没有m_detectService=NULL这一句的时候,会调用CDetectService的默认构造函数,而默认构造函数是编译器自动生成的,没有初始化临界区对象。于是进入临界区时,程序出错。刚开始,看到VS2005弹出一个异常提示窗口的时候,两眼就是一黑。觉得问题好像很难。不过,经过仔细分析和耐心调试后发现,其实问题的原因很简单。只是有关一些C++类的基本概念问题导致的。说到底,还是自己对C++的语法及工作机制还理解不深,导致这么一个异常产生。这也提醒我,需要不断的细细体会C++精神来更好的完成自己的目标。