游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1739|回复: 2

我使用queue充当2个线程的消息队列,push的时候会随机出错

[复制链接]

32

主题

377

帖子

378

积分

中级会员

Rank: 3Rank: 3

积分
378
发表于 2007-12-13 14:19:00 | 显示全部楼层 |阅读模式
如题,使用了queue,2个线程一个push,一个pop。使用了互斥量。但是程序运行中

会随机在push的时候出错,而且出错时间比较快。经过调试,发现应该是在queue push

分配内存的时候出错了。

我的pop与push函数代码如下:
Pop函数:
void MsgProcRun()
{
DWORD dwWaitResult = WaitForSingleObject( hMutex, 100L);
                if( dwWaitResult == WAIT_OBJECT_0 )
{
if( !MsgStack->isEmpty() )
{
DXInput::MsgStackNode MsgNode = MsgStack-&gtop();
MsgProc( MsgNode );
}
ReleaseMutex(hMutex);
}
}
Push函数:
int MsgPro( DXInput::StackCellForMessageAndType MsgNode )
{
DWORD dwWaitResult = WaitForSingleObject( hMutex, 100L);
if( dwWaitResult == WAIT_OBJECT_0 )
{
if( MsgStack == NULL ) return -1;
MsgStack->Push( MsgNode );
ReleaseMutex(hMutex);
}
return 1;
}
程序里面使用了一些自定义类型,包括queue稍微做了下封装。大家不用理会。请高手帮我看看问题出在哪里啊?

1

主题

5

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2007-12-13 17:38:00 | 显示全部楼层

Re:我使用queue充当2个线程的消息队列,push的时候会随机

其他地方先不说,你看看这一句代码:
if( MsgStack == NULL ) return -1;
如果if成立,函数将退出,但此时hMutex还没有被释放,是很大的逻辑问题

32

主题

377

帖子

378

积分

中级会员

Rank: 3Rank: 3

积分
378
 楼主| 发表于 2007-12-13 22:13:00 | 显示全部楼层

Re: Re:我使用queue充当2个线程的消息队列,push的时候会随

twooooo: Re:我使用queue充当2个线程的消息队列,push的时候会随机出错,求救!

其他地方先不说,你看看这一句代码:
if( MsgStack == NULL ) return -1;
如果if成立,函数将退出,但此时hMutex还没有被释放,是很大的逻辑问题


哦,对对,我这个地方改过了。还是要错。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-17 17:46

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表