社区
进程/线程/DLL
帖子详情
请教CWinThread::InitInstance返回false的问题!
hungboy0
2009-05-22 04:15:47
大家好,我有一个自定义的CWinThread类,我在InitInstance中做了些初始化的事情。如果初始化失败就返回false,但是现在只要返回false,就会出现运行时错误:“Invalid Address specified to RtlValidateHeap”。
请教高手解决办法!
...全文
285
14
打赏
收藏
请教CWinThread::InitInstance返回false的问题!
大家好,我有一个自定义的CWinThread类,我在InitInstance中做了些初始化的事情。如果初始化失败就返回false,但是现在只要返回false,就会出现运行时错误:“Invalid Address specified to RtlValidateHeap”。 请教高手解决办法!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
arong1234
2009-05-24
打赏
举报
回复
我觉得返回false是合理的,关键是你做了什么初始化?这个初始化如果没有正确清理会不会又问题
[Quote=引用楼主 hungboy0 的帖子:]
大家好,我有一个自定义的CWinThread类,我在InitInstance中做了些初始化的事情。如果初始化失败就返回false,但是现在只要返回false,就会出现运行时错误:“Invalid Address specified to RtlValidateHeap”。
请教高手解决办法!
[/Quote]
Fireway2008
2009-05-23
打赏
举报
回复
你可以在 CWinThread::InitInstance内加入判断 是否初始化成功的判断语句,
比如,new分配失败的话,就return FALSE;
而且,没必要让主线程结束掉吧。
推荐来这个帖子学习一下:
http://hi.bccn.net/space-290696-do-blog-id-13862.html
Fireway2008
2009-05-23
打赏
举报
回复
[Quote=引用 6 楼 hungboy0 的回复:]
意思是这个线程仍然返回true吗?然后在主线程里结束这个线程?
CMyThread::InitInstance()
{
if(!DoInit())
{
g_MainDlg->PostMessage(WM_CLOSE);
return true;
}
DoOtherThing();
return true;
}
主线程中怎么结束掉这个线程呢?
[/Quote]
内部的语句不必改动的,没必要故意去返回FALSE。
如果你这样做,线程就没有意义了。
如果InitInstance返回FALSE表示线程初始化失败,CWinThread将会自动终止线程。
所以,你只需要给主线程(主窗口)发送一个关闭或者退出的消息就可以了。
hungboy0
2009-05-23
打赏
举报
回复
意思是这个线程仍然返回true吗?然后在主线程里结束这个线程?
CMyThread::InitInstance()
{
if(!DoInit())
{
g_MainDlg->PostMessage(WM_CLOSE);
return true;
}
DoOtherThing();
return true;
}
主线程中怎么结束掉这个线程呢?
finetawe
2009-05-23
打赏
举报
回复
支持4楼,传递退出消息
goodname
2009-05-23
打赏
举报
回复
给主线程投递个退出消息.
hungboy0
2009-05-23
打赏
举报
回复
[Quote=引用 2 楼 Fireway2008 的回复:]
返回了false表示创建失败,那是自然的。
你是打算强制返回false?
[/Quote]
是的,我想在这个线各失败的情况下结束主线程。
有没有什么其它办法呢?
biweilun
2009-05-23
打赏
举报
回复
原来的return不要改动
hungboy0
2009-05-23
打赏
举报
回复
继续求教。。。
hungboy0
2009-05-23
打赏
举报
回复
楼上的意思是不用return语句吗?
biweilun
2009-05-23
打赏
举报
回复
何必这么做呢?直接给主线程PostQuitMessage好了呀
hungboy0
2009-05-23
打赏
举报
回复
还是不是太明白。
1)结束主线程是必须的,因为我要在这个线程不能工作的时候退出程序。
2)如果我把上面的代码改为如下,就会出现之前的错误提示:
CMyThread::InitInstance()
{
if(!DoInit())
{
g_MainDlg->PostMessage(WM_CLOSE);
return false;//更改处
}
DoOtherThing();
return true;
}
这是为什么呢?
Fireway2008
2009-05-22
打赏
举报
回复
返回了false表示创建失败,那是自然的。
你是打算强制返回false?
jingang_83
2009-05-22
打赏
举报
回复
线程堆栈出错啊
VC小知识(转)
(1) 如何通过代码获得应用程序主窗口的 指针?
主窗口的 指针保存在C
Win
Thread
::m_pMainWnd中,调用AfxGetMainWnd实现。
AfxGetMainWnd() ->Show
Win
dow(SW_SHOWMAXMIZED)
//使程序最大化.
(2) 确定应用程序的路径
Use GetModuleFileName 获得应用程序的路径,然后去掉可执行文件名。
Example:
TCHAR
VC小知识
(1) 如何通过代码获得应用程序主窗口的 指针?
主窗口的 指针保存在C
Win
Thread
::m_pMainWnd中,调用AfxGetMainWnd实现。
AfxGetMainWnd() ->Show
Win
dow(SW_SHOWMAXMIZED)
//使程序最大化.
(2) 确定应用程序的路径
Use GetModuleFileName 获得应用程序的路径,然后去掉可执行文件名。
Example:
TC
VC常用小知识
(1) 如何通过代码获得应用程序主窗口的 指针? 主窗口的 指针保存在C
Win
Thread
::m_pMainWnd中,调用AfxGetMainWnd实现。 AfxGetMainWnd() ->Show
Win
dow(SW_SHOWMAXMIZED) //使程序最大化.
[Copied] 80 VC++ tips
(1) 如何通过代码获得应用程序主窗口的 指针?主窗口的 指针保存在C
Win
Thread
::m_pMainWnd中,调用AfxGetMainWnd实现。AfxGetMainWnd() ->Show
Win
dow(SW_SHOWMAXMIZED)//使程序最大化. (2) 确定应用程序的路径Use GetModuleFileName 获得应用程序的路径,然后去掉可执行文件名。Example:T...
[转]VC常用小知识
[转]VC常用小知识 (1) 如何通过代码获得应用程序主窗口的 指针? 主窗口的 指针保存在C
Win
Thread
::m_pMainWnd中,调用AfxGetMainWnd实现。 AfxGetMainWnd() ->Show
Win
dow(SW_SHOWMAXMIZED) //使程序最大化. (2) 确定应用程序的路径 Use GetModuleFileName
进程/线程/DLL
15,467
社区成员
49,170
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章