多线程编程里如何运用CreateMutex,WaitForSingleObject,ReleaseMutex来实现线程同步

多线程编程里如何运用CreateMutex,WaitForSingleObject,ReleaseMutex来实现线程同步多线程编程里如何运用CreateMutex,WaitForSingleObject,ReleaseMutex来显现线程同步

大家好,又见面了,我是你们的朋友全栈君。

这几天忙着写一个实现basler相机的采集功能的软件,其实无非也就是看文档,调用他提供的接口。

但在这其中出现了一点小问题,我写了一个子进程,但每次使用全局标识符关闭子进程,主进程都会出现错误,提示捕获流正在进行,相机已挂载,最后程序终止。在看了许多进程的资料,和研究了basler的接口后。终于解决了这个问题。

其实basler的相机实现接口是多层的,每一层都是一种资源,上下层之前是需要通过连接,断开来操作,最重要的就是资源是唯一的。而我写的程序,子进程和父进程中都有各自的一套对相机的使用和输出方案,最后导致了冲突,子进程挂载了设备,主进程就无法使用设备。

主要还是由于多进程时,cpu的执行是来回切换的,导致设备还没断开,就又要连接,相机还没捕捉完,就又要开始捕捉动作。其实这叫线程的同步,同步很重要,若同步失败可能引发程序死锁。

所以我需要一种控制cpu切换的方案,使进程里着一系列的动作完成了再跳转进程。最后解决的方法是:

使用CreateMutex创建一种资源,然后在进入进程的时候WaitForSingleObject,等待此资源被分配到本进程,否则等待,最后进程的功能实现了再ReleaseMutex释放资源,供其他进程使用。

这样一来,每个进程的执行就会是一个连续的动作,这样进程里的摄像机动作就会一气呵成,设备流也不会冲突,程序功能实现。

//子进程函数
UINT camera_test(LPVOID para)
{
    //......
    //打开相机

    while (true)
    {
        .......
//*********************************************************
        WaitForSingleObject(h_camera, INFINITE);
        //......
        //相机的操作
        ReleaseMutex(h_camera);
        //********************************************************
    }
    //......关闭相机
}

父进程里类似。

最近在学习ruby,看到了它的多线程,又对此问题有了更深的了解。ruby提供了两种同步方法:Mutex和Queue

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/153194.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 金士顿u盘修复工具怎么用_用diskgenius修复u盘

    金士顿u盘修复工具怎么用_用diskgenius修复u盘重新启动电脑后再插入读卡器试试左栏将列出电脑曾连接的所有网络名称对了,量产工具里有个CDROMSIZE,哪个是干嘛的?怎么填?u盘视频怎么在手机上播放不了怎么办到此就启动成功了,adatau盘量产,其实也不难,只是苹果电脑可能对某些启动盘有些挑剔,大家选择合适的准没问题。云顶攻略在WinPE系统的桌面上,鼠标右击我的电脑”—>管理”—>磁盘管理”,可以看到WinPE系笔记本u盘安装…

    2025年10月12日
    1
  • 吐血总结:解决 Reboot and select proper boot device or ……以及其它蓝屏黑屏「建议收藏」

    吐血总结:解决 Reboot and select proper boot device or ……以及其它蓝屏黑屏「建议收藏」程序猿一枚,笔记本用了两年了,被我鼓捣的死去活来,难免会跟我闹些“小别扭”,借助各种黑屏蓝屏对我“发脾气”~开始还好(一年前),一些小错误还都镇的住,免去了重装系统带来的麻烦。近来不知怎地,各种傲娇,疯狂蓝屏、自动重启外加重启后黑屏,最让我头疼的就是Rebootandselectproperbootdeviceor。。。这个错误,以前都还好,出现这个错误之后进入BIOS面板来回调…

    2022年4月30日
    240
  • android微信怎么建群,微信怎么建群?微信怎么建群当群主?

    android微信怎么建群,微信怎么建群?微信怎么建群当群主?【科技讯】5月12日消息,微信怎么建群,微信怎么建群当群主?微信怎么建群聊,微信建群第一次多少人?想必这些问题,已经开始成为大家在日常使用微信时经常会遇到的一个问题,今天,科技讯小编就亲自上手,为大家一一解答这些问题。微信已然成为大家日常进行社交的第一工具,虽然同属腾讯旗下产品,但是微信与QQ显然有着明显的用户群体区分,qq仍然活跃着大量的95后甚至00后的年轻人,而在他们看来,微信则是“大人”们…

    2022年5月12日
    52
  • pycharm导包时出现错误怎么解决_pycharm引入模块报错

    pycharm导包时出现错误怎么解决_pycharm引入模块报错pycharm导包错误没有警告

    2025年6月15日
    3
  • siamfc代码解读_每日一文:目标跟踪(SiamFC)「建议收藏」

    siamfc代码解读_每日一文:目标跟踪(SiamFC)「建议收藏」Fully-ConvolutionalSiameseNetworksforObjectTracking.arXiv:1606.09549v2主体结构:核心CNN是AlexNet,去掉padding和全连接层FC,加入BN层,改为全卷积网络FCN,控制stride为8。FCN部分作用相当于特征提取,会得到与输入图像分辨率相关,通道数128的featuremap,类似与常用fHOG特征(h…

    2022年9月1日
    6
  • connectionStrings 元素[通俗易懂]

    connectionStrings 元素[通俗易懂].NETFramework常规参考connectionStrings元素(ASP.NET设置架构)为ASP.NET应用程序和ASP.NET功能指定数据库连接字符串(名称/值对的形式)的集合。此元素是.NETFramework2.0版中的新元素。configuration元素(常规设置架构)connectionStrings元素…

    2022年5月22日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号