程序在实现中构造了一个对象,在运行中可能会创建这个对象,使用完毕后析构掉。
但在使用中发现,有时析构该对象时会导致程序失去响应。我在日志函数的末尾跟踪,发现日志能记录到析构函数的最后一条记录,但delete后的提示信息日志记录不到。初步判断可能是析构未完全,但考虑到的我都关掉了(更何况不关也不会失去响应啊)。请各位高手帮忙分析一下,谢谢!

解决方案 »

  1.   

    也许你没有创建这个对象。
    如果是指针,那么应该将这个指针new之前显式赋值为NULL,在delete的时候判断指针是否为NULL,非NULL(即运行中创建了)就delete,否则不delete它。
    如果是一个对象,那么创建的时候设置一个标志位,析构delete的时候进行判断!
      

  2.   

    这个我也按这种方式进行了判断处理.
    对象析构delete的时候能正确响应,但到最后程序执行到(~object)完成后可能会失去响应.这和析构相关吗,谢谢!
      

  3.   

    的确使用了多线程,程序应该没有等待某个线程的退出。我所构造的对象会产生几个线程,我在析构该对象时先调用TerminateThread()函数中断所有线程,然后再析构其他的。
      

  4.   

    我想不应该在析构函数中调用TerminateThread()函数吧,应该放在
    ONDESTROY函数中比较好吧。楼主可以跟一下看是不是在析构函数中跑
    不动了,另外析构该对象也有可能跑不动,都放在ONDESTROY中试一下
    吧。
      

  5.   

    我是构造一个对象,他拥有几个线程处理任务。不好构造ONDESTROY函数,只有在析构时才需要调用它。这个情况不是老出现的,而且不好进行跟踪调试。只能采用日志的方式。
      

  6.   

    谢谢xift_2008提醒。程序构造的对象包括几个线程,析构该对象同时需要退出这几个线程。我为退出这几个线程定义了一个函数(其中调用了TerminateThread 函数),在该对象析构函数中调用。不知这样处理是否妥当,望指点。谢谢!