多线程编程里如何运用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)
上一篇 2022年6月26日 下午2:16
下一篇 2022年6月26日 下午2:16


相关推荐

  • java保留小数点后两位_Java中如何保留小数点后两位

    java保留小数点后两位_Java中如何保留小数点后两位java 中四舍五入后并保留两位小数的方法 以 double 为例 1 0String format 打印数字格式化说明的格式 argumentnumb flags width precision typeargument 若参数大于 1 指定哪一个 flags 符号 如 width 最小字符数 precision 精确度 type 类型 如 f 浮点 p

    2026年3月19日
    2
  • SATA接口定义

    SATA接口定义转自:https://blog.csdn.net/u013000139/article/details/50371568SATA数据接口(7针)电源接口(15针)定义详解SATA是SerialATA(SerialAdvancedTechnologyAttachment)亦称串行ATA,是由Intel、IBM、Dell、APT、Maxtor和Seagate公司共同提出的硬盘接口规范。…

    2022年5月1日
    34
  • pycharm 自动补全括号 引号

    pycharm 自动补全括号 引号过程 File gt settings gt Editior gt General gt SmartKeys 勾选 Insertpaired lt gt

    2026年3月19日
    2
  • iphoneX 屏幕失灵误区

    iphoneX 屏幕失灵误区误解最近手机给小朋友玩 发现手机无法正常使用触屏 一开始以为屏幕坏掉了于是去网上搜索 发现了很多很多情况 还有很多扯蛋的解决办法这是一个 完全是瞎说还有个说是气温低的原因 这个有可能 之前用 6 的时候也出现手机自动重启的情况事实其实更多的原因是大家都误触到了旁白模式 盲人使用 iphonex 的默认旁白进入 是电源键连续按压 3 次 所以还是很容易误操作进去的进入旁白模

    2026年3月26日
    2
  • 操作系统(第四版)期末复习总结(上)

    操作系统(第四版)期末复习总结(上)马上要考操作系统了,第一章操作系统引论1、操作系统是什么?操作系统为用户完成所有“硬件相关,应用无关“的工作,以给用户方便、高效、安全的使用环境1.1、定义:操作系统是一个大型的程序系统,它负责计算机的全部软、硬件资源的分配、调度工作,控制并协调多个任务的活动,实现信息的存取和保护。它提供用户接口,使用户获得良好的工作环境。1.2、目标(1)、方便性:配置OS后计算机系统更容易使用(2)、…

    2022年6月8日
    37
  • 2.3双飞翼布局

    2.3双飞翼布局圣杯布局的改进版 lt DOCTYPEhtml gt lt html gt lt head gt lt metacharset UTF 8 gt lt title gt lt title gt lt styletype text css gt margin 0 padd

    2026年3月19日
    2

发表回复

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

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