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


相关推荐

  • CImage 类

    CImage 类CImage提供增强的位图支持,包括加载和保存采用JPEG、GIF、BMP和可移植网络图形格式的图像(PNG)格式。说明无法在Windows运行时中执行的应用程序中使用此类及其成员。语法classCImage成员公共构造函数公共构造函数 “属性” 说明 CImage::CImage 构造函数。 公共方法公共方法 “属性” 说明 CImage::AlphaBlend 显示具有透明或半透明像素的位图。 CImage:.

    2022年6月30日
    35
  • android 8原生系统下载地址,android8.0下载地址 android8.0系统下载网址[通俗易懂]

    android 8原生系统下载地址,android8.0下载地址 android8.0系统下载网址[通俗易懂]android8.0系统下载网址:大家期待的android8.0,命名为androido终于正式公布了,对于大家最关心的android8.0发布时间和新特性方面,谷歌表示今年夏季末,用户就可以升级了。本次开发者大会上,谷歌并没有公布android8.0的新功能,围绕新系统只有两点FluidExperience(流畅体验)和Vitals(核心功能)。简单来说就是,FluidExperience的内容…

    2022年6月19日
    56
  • 数据挖掘技术、方法及应用

    数据挖掘技术、方法及应用目录(?)[+]一幅凝固的油画 Keywords:datamining,Knowledgediscoveryindatabases,DM,KDD,CRISP-DM,Internet概念基于Internet的全球信息系统的发展使我们拥有了前所未有的丰富数据。大量信息在给人们带来方便的同时也带来了一大堆问题:第一是信息过量,难以消化;第二是信息真假难以辨识;第三

    2022年6月17日
    39
  • unity3D 编辑器扩展,MenuItem 和 ContextMenu 的使用方法[通俗易懂]

    unity3D 编辑器扩展,MenuItem 和 ContextMenu 的使用方法[通俗易懂]官方也有一个文章,举了MenuItem类的一些使用方法。我是传送门,点我首先是unity顶部菜单栏的一些用法,如图:注意:MenuItem是编辑器类,所以技能导入usingUnityEditor;命名空间,且一般我们的类也不是集成自MonoBehaviour的,而是集成ScriptableObject的。最普通的MenuItem调用:[MenuItem(“MenuItem/普通…

    2025年6月28日
    4
  • python中dtype object_python的dtype有几种

    python中dtype object_python的dtype有几种NumPy中定义的不同标量数据类型。云海天教程网,大量的免费python教程,欢迎在线学习!NumPy数字类型是dtype(数据类型)对象的实例,每个对象具有唯一的特征。这些类型可以是np.bool_,np.float32等。数据类型对象(dtype)数据类型对象描述了对应于数组的固定内存块的解释,取决于以下方面:数据类型(整数、浮点或者Python对象)数据大小字节序(小端或大端)在结…

    2022年6月2日
    75
  • h5页面 请在微信客户端打开链接_完美解决 请在微信客户端打开链接

    h5页面 请在微信客户端打开链接_完美解决 请在微信客户端打开链接原标题:完美解决请在微信客户端打开链接背景描述相信有模拟微信页面请求的测试都有看到过这个页面,简单点说就是爬虫爬微信页面,进行回放的时候会出现这个页面。大概在1年前,专门安排了一个人去解决这个技术问题,遗憾的是当时没有找到解决方案,接下来所有微信端的接口测试和性能测试都无法进行,今天和大家分享下我们的解决方案,希望大家可以绕过微信的坑。业务场景我这里以JMeter来举例,我们可以通过在JMet…

    2022年6月8日
    34

发表回复

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

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