请教CWinThread::InitInstance返回false的问题! 大家好,我有一个自定义的CWinThread类,我在InitInstance中做了些初始化的事情。如果初始化失败就返回false,但是现在只要返回false,就会出现运行时错误:“Invalid Address specified to RtlValidateHeap”。请教高手解决办法! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 返回了false表示创建失败,那是自然的。你是打算强制返回false? 意思是这个线程仍然返回true吗?然后在主线程里结束这个线程?CMyThread::InitInstance(){ if(!DoInit()) { g_MainDlg->PostMessage(WM_CLOSE); return true; } DoOtherThing(); return true;}主线程中怎么结束掉这个线程呢? 内部的语句不必改动的,没必要故意去返回FALSE。如果你这样做,线程就没有意义了。 如果InitInstance返回FALSE表示线程初始化失败,CWinThread将会自动终止线程。 所以,你只需要给主线程(主窗口)发送一个关闭或者退出的消息就可以了。 你可以在 CWinThread::InitInstance内加入判断 是否初始化成功的判断语句,比如,new分配失败的话,就return FALSE;而且,没必要让主线程结束掉吧。推荐来这个帖子学习一下:http://hi.bccn.net/space-290696-do-blog-id-13862.html 还是不是太明白。1)结束主线程是必须的,因为我要在这个线程不能工作的时候退出程序。2)如果我把上面的代码改为如下,就会出现之前的错误提示:CMyThread::InitInstance(){ if(!DoInit()) { g_MainDlg->PostMessage(WM_CLOSE); return false;//更改处 } DoOtherThing(); return true;}这是为什么呢? 何必这么做呢?直接给主线程PostQuitMessage好了呀 楼上的意思是不用return语句吗? 我觉得返回false是合理的,关键是你做了什么初始化?这个初始化如果没有正确清理会不会又问题 3G上网卡 & socket? 想了解一点数据结构的知识,大家推荐一本书吧,谢谢! Only两行程序。解释一下原理^_^ 在CFile类里面写文件怎么换行? 问两个比较简单的问题 请问高手:(200分)调试著名的画红色R钩子程序时,说m_hook.start未定义。郁闷。 求助 请问list box能不能支持多选? 标签控件如何随对话框移动??? 什么是类的子类化 有高手能告诉我 怎么用try捕获MFC 中 UpdateData() 中的错误? 194个奇怪的warning!求救!
{
if(!DoInit())
{
g_MainDlg->PostMessage(WM_CLOSE);
return true;
} DoOtherThing();
return true;
}主线程中怎么结束掉这个线程呢?
内部的语句不必改动的,没必要故意去返回FALSE。
如果你这样做,线程就没有意义了。
如果InitInstance返回FALSE表示线程初始化失败,CWinThread将会自动终止线程。
所以,你只需要给主线程(主窗口)发送一个关闭或者退出的消息就可以了。
比如,new分配失败的话,就return FALSE;
而且,没必要让主线程结束掉吧。推荐来这个帖子学习一下:
http://hi.bccn.net/space-290696-do-blog-id-13862.html
1)结束主线程是必须的,因为我要在这个线程不能工作的时候退出程序。
2)如果我把上面的代码改为如下,就会出现之前的错误提示:
CMyThread::InitInstance()
{
if(!DoInit())
{
g_MainDlg->PostMessage(WM_CLOSE);
return false;//更改处
} DoOtherThing();
return true;
}
这是为什么呢?