在线等!!Unhandled exception at 0x00430f59 in test.exe: 0xC0000005: Access violation reading location 0x656761cd.

tony_w2000 2004-01-30 09:28:33
我的多线程程序执行了几分钟后就出现如此错误,

Unhandled exception at 0x00430f59 in test.exe: 0xC0000005: Access violation reading location 0x656761cd.

BOOL __cdecl AfxPreTranslateMessage(MSG* pMsg)
{
CWinThread *pThread = AfxGetThread();
if( pThread )
return pThread->PreTranslateMessage( pMsg ); // debug停在这行了
else
return AfxInternalPreTranslateMessage( pMsg );
}

请问这是什么错误??解答马上给分
...全文
5151 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
seacode 2004-02-03
  • 打赏
  • 举报
回复
楼主!强烈建议你跟踪代码到CList Control,
那些东西都是消息驱动的,跟你人为开几个线程没关系,
Update--->SendMessage(),
又回到原先的问题上去了,
:(
tony_w2000 2004-02-02
  • 打赏
  • 举报
回复
我已经把我的多线程里面的所有类似SendMessage操作都关了,但同样是出现那个错误。Unhandled exception at 0x00430f59 in test.exe: 0xC0000005: Access violation reading location 0x656761cd.

PreTranslateMessage( pMsg ); 我想就是这个pMsg不能为读!!!不知道到底是怎么回事儿
seacode 2004-02-02
  • 打赏
  • 举报
回复
楼主啊楼主,答案你自己都给说了啊,
SendMessage()是同步的,Windows不处理完是不会返回的,
而你用的还是多线程,应该考虑到多线程同步的问题,
出现这种问题有点像死锁那样的性质,
都在等待消息的处理,出现冲突也就很自然了吧!
我想这应该也是为什么会停在PreTranslateMessage()的原因吧,
如何解决就不清楚了,期待高人出现,hoho
tony_w2000 2004-02-02
  • 打赏
  • 举报
回复
什么能导致return pThread->PreTranslateMessage( pMsg ); 这个pMsg不能为读呢??
tony_w2000 2004-02-02
  • 打赏
  • 举报
回复
BOOL __cdecl AfxPreTranslateMessage(MSG* pMsg)
{
CWinThread *pThread = AfxGetThread();
if( pThread )
return pThread->PreTranslateMessage( pMsg ); // debug停在这行了
else
return AfxInternalPreTranslateMessage( pMsg );
}

请问这是什么导致这个错误??解答马上给分
tony_w2000 2004-02-02
  • 打赏
  • 举报
回复
BOOL __cdecl AfxPreTranslateMessage(MSG* pMsg)
{
CWinThread *pThread = AfxGetThread();
if( pThread )
return pThread->PreTranslateMessage( pMsg ); // debug停在这行了
else
return AfxInternalPreTranslateMessage( pMsg );
}

这段代码是系统的thecore.cpp中定义的,

我的线程程序在执行中已经不再调用跟Messge有关系的代码,

另外,我查了也不是跟多线程有关系,我只开一条线程执行了不久也出停在上面那行,

我就不明白了,到底是什么在调用msg呢??难道是主窗口??

我的线程程序有update CList control, 我用的是传入CList指针,之后直接操作。

会不会是这个原因呢?
GR 2004-02-02
  • 打赏
  • 举报
回复
我只是提供一下我的建议。如果我碰到这种情况的话,我首先跟进去看,判断msg的地址是否就是那个不可读的位置,如果不是,则可以断定内部函数调用中另外的一个结构出了问题,如果是,那么往上查,看看是谁在分配这个地址,有没有被跳过的可能。光看这段代码,好象是没问题的。再多贴点出来看看。
bmon_xyz 2004-02-01
  • 打赏
  • 举报
回复
看一下call stack吧
seacode 2004-01-30
  • 打赏
  • 举报
回复
什么原因我也说不好,但是我以前也遇到过,没有报错,但是不执行,
后来发现就是SendMessage引起的,改成PostMessage就没问题了,
进入执行线程后调用的时机应该是有说法的,
不知道为什么会这样,学习ing........
tony_w2000 2004-01-30
  • 打赏
  • 举报
回复
没明白,thread不启动,如何启动SendMessage呢??我只有在thread里面定义。

而且是执行了一些操作之后才会有一个SendMeesage发送到窗口,窗口通过我自定义的

WM_USER_THREAD_UPDATE激发ThreadUpdate函数,我从中获取100,

从而得之thread中的运行结果。

我目前把同步SendMessage改为异步PostMessage了,目前还没有出做。

不知道这样做是否好??我看Task Manager中我的程序有时候有大量的Handles在等待。

我想那肯定是PostMessage发出的消息还没有处理,请那位有些高见呢?
seacode 2004-01-30
  • 打赏
  • 举报
回复
线程某次未完全启动时调用了SendMessage
tony_w2000 2004-01-30
  • 打赏
  • 举报
回复
我知道Access violation reading location 0x656761cd的意思,问题是是什么产生的呢??我想肯定跟线呈消息有关,我在线程中有这个

::SendMessage(t_hWnd, WM_USER_THREAD_UPDATE, (WPARAM)100, (LPARAM)0);


/////////////
return pThread->PreTranslateMessage( pMsg ); // debug停在这行了

Pipi0714 2004-01-30
  • 打赏
  • 举报
回复
0x656761cd这块内存不允许你读或者没有分配而你去读了

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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