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


相关推荐

  • FTP客户端FlashFXP激活成功教程教程[通俗易懂]

    FTP客户端FlashFXP激活成功教程教程[通俗易懂]flashfxp5.4下载地址:https://www.flashfxp.com/download激活成功教程工具下载地址:链接:https://pan.baidu.com/s/17Dq_OnH-ua9fbOuvMIdRXQ密码:laat下载之后然后正常安装就行了,安装完毕之后,先别打开软件,激活成功教程工具下载之后,包含两个文件,解压到flashfxp的安装位置根目录,如下:双击打开Fl…

    2022年7月26日
  • WPF Window 窗口获得焦点和失去焦点事件

    WPF Window 窗口获得焦点和失去焦点事件Window窗口获得焦点和失去焦点事件(窗口变为背景窗口、窗口切换等都引起窗口焦点失去)Activated获得焦点事件和Deactivated失去焦点的事件:Activated:获得焦点(首次打开软件时;由别的软件切换回当前软件时;点击当前软件在任务栏的按钮时)Deactivated:失去焦点,与Activated正好相反,(Deactivated=de+activated)使用方法有两种:第一种是在XAML中声明,然后在后台书写执行代码:<W…

    2022年6月23日
  • Lunix_UNIX/LINUX

    Lunix_UNIX/LINUXlinux关机和重启命令(转)Lunix/Unix1.shutdownshutdown命令用于安全关闭Linux系统。shutdown命令的部分参数如下:[-t]指定在多长时间之后关闭系统[-r]重启系统[-k]并不真正关机,只是给每个登录用户发送警告信号[-h]关闭系统(halt)shutdown命令的工作实质是给ini…

    2022年10月4日
  • android onresume方法,非静态方法’onResume’Android Studio

    android onresume方法,非静态方法’onResume’Android Studio我想使用WebView作为Youtube。当我尝试编译它时,出现此错误“非静态方法onResume&无法从静态上下文”引用。非静态方法’onResume’AndroidStudio我曾尝试使用rootView,但它没有工作='(publicclassvodextendsFragment{publicstaticfinalStringTAG=”vod”;@Null…

    2022年5月5日
  • 网页中图片去色问题是什么_网页问题

    网页中图片去色问题是什么_网页问题网页中图片去色问题网页中经常需要一种js效果,就是鼠标经过某张图片,图片去色。为了不加载两张图片(一张彩色和一张灰色),在网上找到了一些方法。方案一:使用grayscale.js可以使用grayscale.js来实现图片的去色,但是有个缺点就是它可以实现鼠标经过图片去色,但是实现不了鼠标移开之后,图片恢复颜色。使用demo:window.onload=function(

    2022年10月6日
  • 黑客技术之初学者编程入门「建议收藏」

    黑客技术之初学者编程入门「建议收藏」你是否曾经在用别人开发的工具尝试“入侵”.你是否希望开发出自己的黑器……相信很多人有着这种近似相同的经历。本章将简单介绍黑客编程及工具开发。如果你是初学编程,如果你从来没有接触过黑客软件的开发,如果你急于想了解黑客编程方面的知识……那么就请继续往下阅读。编程语言和开发环境的选择初学者刚开始学习编程语言最头疼的问题就是如何选择编程语言及合适的开发环境,下面就来具体介绍一下。有

    2022年5月18日

发表回复

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

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