大家好,我有一个自定义的CWinThread类,我在InitInstance中做了些初始化的事情。如果初始化失败就返回false,但是现在只要返回false,就会出现运行时错误:“Invalid Address specified to RtlValidateHeap”。
请教高手解决办法!

解决方案 »

  1.   

    返回了false表示创建失败,那是自然的。你是打算强制返回false?
      

  2.   

    意思是这个线程仍然返回true吗?然后在主线程里结束这个线程?CMyThread::InitInstance()
    {
        if(!DoInit())
        {
            g_MainDlg->PostMessage(WM_CLOSE);
            return true;
        }    DoOtherThing();
        return true;
    }主线程中怎么结束掉这个线程呢?
      

  3.   


    内部的语句不必改动的,没必要故意去返回FALSE。
    如果你这样做,线程就没有意义了。   
    如果InitInstance返回FALSE表示线程初始化失败,CWinThread将会自动终止线程。

       
    所以,你只需要给主线程(主窗口)发送一个关闭或者退出的消息就可以了。
      

  4.   

    你可以在 CWinThread::InitInstance内加入判断  是否初始化成功的判断语句,
    比如,new分配失败的话,就return  FALSE;
    而且,没必要让主线程结束掉吧。推荐来这个帖子学习一下:
    http://hi.bccn.net/space-290696-do-blog-id-13862.html
      

  5.   

    还是不是太明白。
    1)结束主线程是必须的,因为我要在这个线程不能工作的时候退出程序。
    2)如果我把上面的代码改为如下,就会出现之前的错误提示:
    CMyThread::InitInstance()
    {
        if(!DoInit())
        {
            g_MainDlg->PostMessage(WM_CLOSE);
            return false;//更改处
        }    DoOtherThing();
        return true;
    }
    这是为什么呢?
      

  6.   

    何必这么做呢?直接给主线程PostQuitMessage好了呀
      

  7.   

    楼上的意思是不用return语句吗?
      

  8.   

    我觉得返回false是合理的,关键是你做了什么初始化?这个初始化如果没有正确清理会不会又问题