一个子函数:
void createM() //建立内核对象
{
HANDLE handle;
if( ( handle =OpenMutex( MUTEX_ALL_ACCESS,FALSE,"SA" )) == NULL )
handle = CreateMutex( NULL,FALSE,"SA" );
OpenMutex( MUTEX_ALL_ACCESS,FALSE,"SA" );}另一个函数:
void check()
{
HANDLE handp = NULL;
if( (handp = OpenMutex( MUTEX_ALL_ACCESS,FALSE,"SA" )) != NULL )
{
WaitForSingleObject( handp,INFINITE );
}
}在主程序中,先调用createM(),然后子线程调用check(),发现程序并没有在waiforsingleobject被阻塞,非常另人奇怪,因为我的第一函数并没有释放。为什么呢?我用的是socket accept 让程序产生子线程,并且在主程序中建立内核,在socket 生成的子线程中调用check.请高人指教。
void createM() //建立内核对象
{
HANDLE handle;
if( ( handle =OpenMutex( MUTEX_ALL_ACCESS,FALSE,"SA" )) == NULL )
handle = CreateMutex( NULL,FALSE,"SA" );
OpenMutex( MUTEX_ALL_ACCESS,FALSE,"SA" );}另一个函数:
void check()
{
HANDLE handp = NULL;
if( (handp = OpenMutex( MUTEX_ALL_ACCESS,FALSE,"SA" )) != NULL )
{
WaitForSingleObject( handp,INFINITE );
}
}在主程序中,先调用createM(),然后子线程调用check(),发现程序并没有在waiforsingleobject被阻塞,非常另人奇怪,因为我的第一函数并没有释放。为什么呢?我用的是socket accept 让程序产生子线程,并且在主程序中建立内核,在socket 生成的子线程中调用check.请高人指教。
解决方案 »
- QQ 如何嗅探IP
- 胡大哥, 为民解忧了!无窗口的activex,右键菜单为什么不能弹出来?(windowlessActivate)
- DirectShow SDK问题
- 关于ListView
- 如何利用winpcap实现远程监测?
- 怎样在com组件中向其它窗口程序发送消息?(我只能枚举到程序的进程,不知如何向它发送消息)
- 如何解决如下连接错误
- 菜鸟问题,请指点
- 用STL开发的程序能移植到linux平台上吗?
- 今天我把向潘爱民老师求教的信件整理一下,转帖在论坛上。也许对大家有一些启示。
- VC里有类浏览器吗?如可查看MFC类的的成员函数,数据成员。
- 大海啸捐款香港平均每个人都捐了100港元,不如我们也表示一下。
CloseHandle(handle);
CloseHandle
bInitialOwner
Specifies the initial owner of the mutex object. If this value is TRUE and the caller created the mutex, the calling thread obtains ownership of the mutex object. Otherwise, the calling thread does not obtain ownership of the mutex. To determine if the caller created the mutex, see the Return Values section.
(ZT自MSDN), 第二个参数你用FALSE该考虑一下吧? 另外, CreateM后,应该ReleaseMutex的.
check函数通过Waitforsingleeobject取得该内河对象的控制权后, 在使用完毕后应该ReleaseMutex的啊,以供其它现成继续获得控制权
OpenMutex就获得了所有权?没有这种说法吧。比如一个线程拥有mutext的所有权,它一直没有releasemutext,你能够去抢啊?