CreateMutex疑问

kouzc 2017-08-25 04:48:50
请教大神,今天在调试一个程序时发现 当我用vs按F5和正常点击这个程序的图标的方式去启动一个程序且这两种启动方式间隔较小时,CreateMutex竟然无效了。此外,用命力行带个参数和正常点击启动也会出现类似效果。 如下图:
...全文
253 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-08-28
  • 打赏
  • 举报
回复
《Windows核心编程》
sky065530 2017-08-28
  • 打赏
  • 举报
回复
引用 7 楼 qq_20975143 的回复:
[quote=引用 1 楼 chengbar 的回复:] 打日志,GetLastError()
GetLastError一个返回0,另一个返回183(ERROR_ALREADY_EXISTS),但还是出现两个进程了[/quote] 没有失败吧,返回ERROR_ALREADY_EXISTS是打开了一个已有的内核对象(“kzcInstall”)的意思吧。你再看看有没有其它内核对象也叫“kzcInstall”?
kouzc 2017-08-28
  • 打赏
  • 举报
回复
引用 9 楼 chengbar 的回复:
这两种启动方式间隔较小时,CreateMutex竟然无效了 InitInstance中 加Sleep 试试哦,
哈哈哈。。。。。加上sleep(500)是可以了 真无奈 - -
sevancheng 2017-08-28
  • 打赏
  • 举报
回复
这两种启动方式间隔较小时,CreateMutex竟然无效了 InitInstance中 加Sleep 试试哦,
kouzc 2017-08-28
  • 打赏
  • 举报
回复
引用 4 楼 cutmelon 的回复:
你把互斥量的名字加个前缀就行了,"Global\\kzcInstall",这个Global是很关键的
加了Global也不行。
kouzc 2017-08-28
  • 打赏
  • 举报
回复
引用 1 楼 chengbar 的回复:
打日志,GetLastError()
GetLastError一个返回0,另一个返回183(ERROR_ALREADY_EXISTS),但还是出现两个进程了
kouzc 2017-08-28
  • 打赏
  • 举报
回复
引用 13 楼 cutmelon 的回复:
[quote=引用 7 楼 qq_20975143 的回复:] [quote=引用 1 楼 chengbar 的回复:] 打日志,GetLastError()
GetLastError一个返回0,另一个返回183(ERROR_ALREADY_EXISTS),但还是出现两个进程了[/quote]你这个log说明mutex的检测是正确的了,问题应该出现在下面的findwindow那里,即使find失败也应该 return FALSE的。这时可能另一个进程已经createmutex成功了,但是窗口还没创建出来,而你现在的逻辑是如果找不到窗口还继续,那不就是会出现两个进程吗?[/quote] 如你所说,确实是这样 唉。。。。。学艺不精 结贴了
cutmelon 2017-08-28
  • 打赏
  • 举报
回复
引用 7 楼 qq_20975143 的回复:
[quote=引用 1 楼 chengbar 的回复:] 打日志,GetLastError()
GetLastError一个返回0,另一个返回183(ERROR_ALREADY_EXISTS),但还是出现两个进程了[/quote]你这个log说明mutex的检测是正确的了,问题应该出现在下面的findwindow那里,即使find失败也应该 return FALSE的。这时可能另一个进程已经createmutex成功了,但是窗口还没创建出来,而你现在的逻辑是如果找不到窗口还继续,那不就是会出现两个进程吗?
老王爱上猫 2017-08-26
  • 打赏
  • 举报
回复
引用 4 楼 cutmelon 的回复:
你把互斥量的名字加个前缀就行了,"Global\\kzcInstall",这个Global是很关键的
有这个说法,官方说明文档?
oyljerry 2017-08-26
  • 打赏
  • 举报
回复
引用 5 楼 老王爱上猫的回复:
[quote=引用 4 楼 cutmelon 的回复:] 你把互斥量的名字加个前缀就行了,"Global\\kzcInstall",这个Global是很关键的
有这个说法,官方说明文档? [/quote] 全局mutex,需要加global。MSDN有描述
cutmelon 2017-08-25
  • 打赏
  • 举报
回复
你把互斥量的名字加个前缀就行了,"Global\\kzcInstall",这个Global是很关键的
kouzc 2017-08-25
  • 打赏
  • 举报
回复
引用 2 楼 oyljerry 的回复:
要看是不是你的检查和创建的地方没有保护好,重入了
这样应该没问题吧?
oyljerry 2017-08-25
  • 打赏
  • 举报
回复
要看是不是你的检查和创建的地方没有保护好,重入了
sevancheng 2017-08-25
  • 打赏
  • 举报
回复
打日志,GetLastError()

15,471

社区成员

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

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