WaitForSingleObject(hMutex,INFINITE)崩溃

cutrain2009 2010-05-06 02:17:04
有一个线程处理函数
其中包含多个分支
if
{
}
else if
{
//进入任务队列
HANDLE hMutex = OpenMutex(MUTEX_ALL_ACCESS,FALSE,TASK_QUEUE_MUTEX);
if(hMutex==NULL)
{
return;
}
WaitForSingleObject(hMutex,INFINITE); //进入互斥区
}
else if
{
//进入任务队列
HANDLE hMutex = OpenMutex(MUTEX_ALL_ACCESS,FALSE,TASK_QUEUE_MUTEX);
if(hMutex==NULL)
{
return;
}
WaitForSingleObject(hMutex,INFINITE); //进入互斥区
}
else
{
}

其中一个线程等待工作正常,但在另一分支中执行WaitForSigleObject程序就崩溃了
请大家给点意见
...全文
851 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
james_hw 2010-05-07
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 cutrain2009 的回复:]

错误如下:
Expression: list iterator not incrementable
For information on how your program can cause an assertion
failure,see the Visual C++ documentation on asserts

提示是在236行;

这行中使用了list的一个itera……
[/Quote]

这个应该是你的list使用上出错了,可能原因太多了,最好把这段代码贴出来。从你的描述来看,我觉得应该不是内核对象的问题
cutrain2009 2010-05-07
  • 打赏
  • 举报
回复
问题在于是在我进去临界区,或是使用互斥量的时候,的那一时刻,执行那条语句出错,摸不透
贪食蛇男 2010-05-07
  • 打赏
  • 举报
回复
list出错就找找list上有没有索引越界之类的,怎么稀里糊涂就赖到互斥量上了……
cutrain2009 2010-05-07
  • 打赏
  • 举报
回复
我把它改成用临界区CriticalSection在 EnterCriticalSeciton也是出现同样的错误;
所以应该不是线程控制使用出错,我总觉的是哪里越界了
cutrain2009 2010-05-06
  • 打赏
  • 举报
回复
提示里没发现时那种错误;
问题在于WaitForSingleObject这个函数是一个系统调用;
给他的参数是一个句柄,确会蹦,感觉好奇怪;互斥量是一个内核中的一个实体;
还出错也只有可能是这个句柄出问题;
但是我的这个互斥量的句柄是刚刚打开的,而且获取互斥量的句柄返回的是一个正常值;

而且这是在同一个线程函数中,其中的一个if分支正常,另一个却不正常,莫不到头绪
赵4老师 2010-05-06
  • 打赏
  • 举报
回复
《Windows核心编程》
pengzhixi 2010-05-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 mstlq 的回复:]
ReleaseMutex(hMutex)呢?
[/Quote]

up
向立天 2010-05-06
  • 打赏
  • 举报
回复
你所说的崩溃是指什么?
能看到调用堆栈么?
cutrain2009 2010-05-06
  • 打赏
  • 举报
回复
我是在open后,接着就WaitForSingleObject的,应该不是句柄问题;
野男孩 2010-05-06
  • 打赏
  • 举报
回复
崩溃时看看hMutex的值是否和创建的时候一样,是不是有可能被意外的改写了。
cutrain2009 2010-05-06
  • 打赏
  • 举报
回复
每个分支都有ReleaseMutex释放;
我检查了我的程序;
在等待事件的时候,在接收到事件的时候也会崩溃;

感觉好像是那个地方处理越界了
mstlq 2010-05-06
  • 打赏
  • 举报
回复
ReleaseMutex(hMutex)呢?
cutrain2009 2010-05-06
  • 打赏
  • 举报
回复
不是一个线程等待工作正常;
是一个分支正常,另一个分支崩溃
cutrain2009 2010-05-06
  • 打赏
  • 举报
回复
出错的时候调用堆栈的信息看不到,我只能让他忽视,
cutrain2009 2010-05-06
  • 打赏
  • 举报
回复
有另一个线程在定时的范围这个list;
刚看了调用堆栈的信息,可以看到那个线程,但不知道怎么入手
cutrain2009 2010-05-06
  • 打赏
  • 举报
回复
我的这个互斥量是用来保护一个list的
向立天 2010-05-06
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 cutrain2009 的回复:]
错误如下:
Expression: list iterator not incrementable
For information on how your program can cause an assertion
failure,see the Visual C++ documentation on asserts

提示是在236行;

这行中使用了list的一个iterat……
[/Quote]

出错以后看调用堆栈
看看到底是哪出的问题
cutrain2009 2010-05-06
  • 打赏
  • 举报
回复
好像我搞错了,
好奇怪,WaitForSingleObject怎么会涉及到list的问题
cutrain2009 2010-05-06
  • 打赏
  • 举报
回复
错误如下:
Expression: list iterator not incrementable
For information on how your program can cause an assertion
failure,see the Visual C++ documentation on asserts

提示是在236行;

这行中使用了list的一个iterator游标;这是在该线程函数的一个分支,怎么会出这个问题;
我的这个线程是用来接收UDP消息的,然后处理;
有点莫名奇妙

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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