基于 MFC7 的控制台程序主线程里不能调用 PeekMessage ?

ccitt 2005-06-01 11:54:12
今天碰到的问题非常奇怪。
就是 使用 vs2003.net 新建一个支持 mfc 的工程,
在主线程下面加一个循环 PeekMessage,如下:

// 初始化 MFC 并在失败时显示错误
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: 更改错误代码以符合您的需要
_tprintf(_T("致命错误: MFC 初始化失败\n"));
nRetCode = 1;
}
else
{
MSG m;
while ( TRUE )
{
PeekMessage(&m, NULL, 0, 0, PM_NOREMOVE);
}
}


退出的时候就出问题了,CWinApp 析构的时候当调用到:
CThreadSlotData::GetThreadValue(int nSlot)
时,发现传进来的 nSlot 值是一个随机的值,出了一个ASSERT

但我上面的代码几乎什么也没做啊,只是Peek一下,而且 PM_NOREMOVE 不删除消息。

有人了解是什么原因吗?烦请告之一下。
...全文
66 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
opentuxedo 2005-06-01
  • 打赏
  • 举报
回复
以前也碰到过。我个人认为CWinApp theApp;一行在这个程序中没有一点作用。
加上它之后会出许多问题。其实不只是使用PeekMessage.即使你加一个空循环在里面也会出同样的错误。
后来我就把CWinApp theApp给删去了。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧