多线程编程里如何运用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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 动画学习之Animate.css的使用与解析[通俗易懂]

    动画学习之Animate.css的使用与解析[通俗易懂]近况近期生活比较单一。const提升自己=true;while(提升自己){写码…看书…思考…睡觉}既单一也充实,单一使我平静,充实使我保持向上的感觉,希望自己真难做到“持续学习,保持思考,不断进步”。最近看到腾讯ISUX团

    2022年7月12日
    27
  • anaconda prompt系统找不到指定的路径_tensorflow怎么用

    anaconda prompt系统找不到指定的路径_tensorflow怎么用我们默认打开jupyternotebook一般是在C盘,那么久而久之你很多的代码都新建在C盘,以后想要清理的时候难免会比较困难,所以在这里推荐大家通过命令在D盘指定目录下打开jupyternotebook,那么你新建的所有文件都是在D盘的指定目录下啦!…

    2022年10月8日
    3
  • RewriteCond 详解[通俗易懂]

    RewriteCond 详解[通俗易懂]RewriteCond重写规则执行条件语法:RewriteCondTestStringCondPattern生效域:serverconfig,virtualhost,directory,.htaccess特别的上面的TestString,可提供反向引用.引用模式为:%N其中N为(0<=N<=9),引用当前若干Rew…

    2022年6月14日
    39
  • IDEA中web项目如何部署到Tomcat上[通俗易懂]

    IDEA中web项目如何部署到Tomcat上[通俗易懂]IDEA中web项目的创建与如何部署到Tomcat

    2025年6月14日
    4
  • 【AC大牛陈鸿的ACM总结贴】【ID AekdyCoin】人家当初也一样是菜鸟

    【AC大牛陈鸿的ACM总结贴】【ID AekdyCoin】人家当初也一样是菜鸟 acm总结帖_ByAekdyCoin     各路大牛都在中国大陆的5个赛区结束以后纷纷发出了退役帖,总结帖,或功德圆满,或死不瞑目,而这也许又会造就明年的各种“炸尸”风波。为了考虑在发退役贴以后明年我也成为“僵尸”的可能性,于是改名曰“总结贴”,不提比赛细节,不提比赛流水账,权当是大学本科生涯中acm生活的点滴记录……   (1)入门篇甲…

    2022年7月23日
    12
  • [原创] 仿滴滴出行打车APP定位导航,增加RFID认证、海外版、司机证件号码识别功能

    [原创] 仿滴滴出行打车APP定位导航,增加RFID认证、海外版、司机证件号码识别功能这是我自己做的一个仿滴滴打车的Android出行项目,主要针对滴滴等出行平台一直饱受质疑的“人车不符”问题,以及当前越发火热的或计划和出海战略,给出行项目增加了下面几个功能:1.RFID识别验证功能:在司机证件或者车内识别硬件嵌入RFID识别芯片,乘客使用手机读取到芯片信息,并且通过网络发送到出行平台数据库进行验证(我用JNI加了一个C语言的MD5加密算法对识别到的信息进行了加密)。如果不是合规的“人”或“车”,则不能完成订单并向平台或监管单位汇报当前位置。

    2022年7月24日
    11

发表回复

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

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