zoukankan      html  css  js  c++  java
  • bug:进程可调用函数而子线程调用报错

    在调试摄像头时遇到问题:在主进程里调用下述函数能够成功,但在子线程里创建时总是失败,错误打印为 sched: RT throttling activated。

    UniqueObj<OutputStream> outputStream(iCaptureSession->createOutputStream(streamSettings.get()));

    原因为子线程的运行策略导致,通过下述函数可以查看和设置当前线程的运行策略。

        int my_policy;
        struct sched_param my_param;
        //my_param.sched_priority = 99;
        if(pthread_setschedparam(pthread_self(), SCHED_OTHER, &my_param) != 0)//线程运行时设置策略和优先值
        {
            RPTERR("v4l2_camera_start_stop::pthread_setschedparam failed
    ");
        }
    
        pthread_getschedparam(pthread_self(), &my_policy, &my_param);
        RPTWRN("v4l2_camera_start_stop::thread_routine running at %s/%d
    ",
                (my_policy == SCHED_FIFO ? "FIFO" : (my_policy == SCHED_RR ? "RR"
                : (my_policy == SCHED_OTHER ? "OTHER" : "unknown"))), my_param.sched_priority);

    系统线程的运行策略为SCHED_FIFO,通过验证发现SCHED_FIFO 和SCHED_RR这两种抢占实时策略都不行,而SCHED_OTHER 可以,主进程即为该策略。

    分析:由于该函数outputStream()写的不好,当使用抢占策略时,耗尽了系统资源,系统因自我保护而报错,写代码时无限循环应该加一些sleep,防止资源耗尽,SCHED_OTHER为非实时策略,优先级低。

  • 相关阅读:
    Spring AOP 代理创建方式
    VS全局搜索
    uni-app中添加AES加密
    中国菜刀"连接被重置"问题解决
    Windows go get下载包失败问题解决
    搭建vulhub 漏洞环境及安装Docker和docker-compose
    DedeCMS 5.7通用重装漏洞分析
    各就各位,预备,GO!
    ARL资产灯塔系统分组资产导出脚本
    玩《巫师3》需要了解的背景知识
  • 原文地址:https://www.cnblogs.com/eleclsc/p/10525730.html
Copyright © 2011-2022 走看看