问个CEvent对象的access问题

william_008 2003-10-24 08:40:09
在自创建线程里用CEvent来同步
::WaitForSingleObject(m_eMyEvent, INFINITE);//等待命令,直到有信号
但每次跟踪到该行时,就提示出错
Unhandled exception in my.exe(MFC42D.DLL):0xC0000005:Access Violation

经单步跟踪调试,应该说是运行到下面这一行时出现上面错误
_AFXMT_INLINE CSyncObject::operator HANDLE() const
{ return m_hObject;}

怎么回事呢?多谢!
...全文
107 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
william_008 2003-10-31
  • 打赏
  • 举报
回复
前辈,感觉您的帮助跟我说的问题不太合适,我说的是线程同步的问题,您说的是共享资源的问题
再说::WaitForSingleObject(m_eMyEvent, INFINITE)这一句应该没有问题吧,这可是技术内幕第4版里的用法,给我个错误的理由先
vcforever 2003-10-28
  • 打赏
  • 举报
回复
CEvent类是从CSyncObject派生出来的
class CEvent : public CSyncObject,如果运用了CEvent对象就不用WIN32的WaitForSingleObject()函数了!Wait.....函数是专门等待windows的核心对象的状态的函数

如果你用MFC中的CEvent类,则你必须用CEvent.CMutex.CCriticalSection的对象来创建CSingleLock类的对象,代码如下:

CEvent m_eMyEvent;

// Relate the synchronization object (m_eMyEvent) with
// our CSingleLock object.
CSingleLock singleLock(&m_eMyEvent);
singleLock.Lock(); // Attempt to lock the shared resource
if (singleLock.IsLocked()) // Resource has been locked
{
//开始访问共享资源

// Now that we are finished,
// unlock the resource for others.
singleLock.Unlock();
}
CSingleLock的Lock()成员函数就相当于WaitSingleObject()函数
UnLock()成员函数集成了CloseHandle的功能,可以使引用计数降低!
具体参考MSDN!
william_008 2003-10-24
  • 打赏
  • 举报
回复
哦, vcforever(霓裳羽衣),知道你的意思,第一个参数应该是句柄,m_eMyEvent是CEvent对象,但其重载了operator HANDLE(),所以它会返回一个句柄了。
而且你的方法我也试了,不行
vcforever 2003-10-24
  • 打赏
  • 举报
回复
你的m_eMyEvent是CEvent对象还是CEvent对象的HANDLE,
WaitForSingleObject()函数的第一个参数是一个句柄,用如下形式试一试
WaitForSingleObject(m_eMyEvent->m_hObject,.......);

祝你成功!
william_008 2003-10-24
  • 打赏
  • 举报
回复
看了看MSDN,好像是有关access权限的问题,但MSDN又没说得怎么详细,不知从何入手找问题

15,467

社区成员

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

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