3 Ubuntu上使用Qt运行多线程,设置程序自启动及保护脚本

2023-11-08

多线程

使用多线程时我们需要加入#include< thread >,这个头文件包含多线程的一些函数
#include< unistd >,这个头文件包含延时函数,sleep(time) eg:sleep(1) //延时1s
C++类:

 class Father
{
public:
    void Father_run()
    {
        while(1)
        {
			for(int i=0;i<3;i++)
			{
            cout<<"Father is running"<<endl;
            sleep(1);
			}
				break;
        }
    }

    void Mather_run()
    {
        while(1)
        {
			for(int i=0;i<3;i++)
			{
            cout<<"Mather is running"<<endl;
            sleep(1);
			}
			break;
        }
    }
};

主函数:

 int main()
{

    Father father;
    std::thread t1(&Father::Father_run,std::ref(father));
    std::thread t2(&Father::Mather_run,std::ref(father));
    t1.join();
    t2.join();


    cout << "Hello World!" << endl;
    return 0;
}

程序运行后,Father_run和Mather_run两个函数会同时运行,并一直输出。
注意:在qt中使用多线程时需要在qt的工程配置文件,也就是pro文件中,加入
LIBS +=-lpthread(添加多线程的库)
在这里插入图片描述
一定要添加,否则会报错。

自启动及保护脚本

Shell教程:https://www.runoob.com/linux/linux-shell.html

自启动及保护脚本:

#!/bin/bash        
echo "Hello !!! "
echo "Start vision code"                             
src=1                                           
cnt=0                                                   
name=FeiHuVision_optimize
cd /.../.../file
make clean && make -j                                    #清除,编译
while [ 1 ]                    
do
count=`ps -ef | grep $name | grep -v "grep" | wc -l`     #返回目标进程数量(正常是2)
echo "Thread count: $count"                              #打印信息
echo "Expection count: $cnt"                             #打印信息
if [ $count -gt 1 ]; then                                #如果进程数>1则表示程序运行正常
	echo "The $name is still alive!"
	sleep $src
else                                                      
	echo "Starting $name..."                             #运行ttyUSB。sh脚本
	#cd ~ && ./ttyUSB.sh
        #cd /home/s305-nuc5/kevin/build-$name-Desktop-Debug/ 
    gnome-terminal -x bash -c "./$name;exec bash;"       #打开一个新的终端,运行程序
    echo "$name has started!"		
	sleep $src                                           #延时sec秒
	((cnt=cnt+1))                                        #cnt自加1
	if [ $cnt -gt 9 ]; then                              #如果cnt>9,重启
	echo "reboot_now"
	fi
fi
done

结束自启动脚本:

#!/bin/bash
echo "Hello !!!"
echo "Kill vision code"
pkill autorun.sh

脚本程序简单说明:

ps -ef //用于查看全格式的全部进程
ps -ef | grep shell_test //shell_test是程序运行的名字。功能是查询有关shell_test的所有进程。
ps -ef | grep $name | grep -v “grep”//功能是去除包含”grep”文本的所有有关shell_test的进程。
wc -l //只显示行数并返回。
ps -ef | grep $name | grep -v “grep” | wc -l //返回进程数
gnome-terminal -x bash -c “./shell_test;exec bash;” //打开一个新的终端,并运行shell_test程序,结束后退出。(最后的exec bash;是让打开的终端在执行完脚本后不关闭。)
&&: eg: 命令1&&命令2 //当命令1运行成功后继续运行2

操作步骤:
切换到脚本目录下:

 sudo chmod u+x shell.sh   //增加执行属性
 bash shell.sh            //用bash解释器运行shell.sh脚本

设置自启动

在终端输入

gnome-session-properties

在这里插入图片描述
添加脚本程序即可
在这里插入图片描述
开机就可以自启动了

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

3 Ubuntu上使用Qt运行多线程,设置程序自启动及保护脚本 的相关文章

随机推荐

  • 如何将ChatGPT培养成「私人助理」

    让她先懂你 然后再AI你 人类的爱建立在相互理解的基础上 而人工智能也是如此 因此 使用ChatGPT并不仅仅是一种训练 而更是一种相互理解的过程 与许多介绍如何使用ChatGPT进行编程 翻译 信息查找或闲聊的文章不同 本文旨在介绍如何在
  • (附源码)计算机毕业设计ssm大学生网络安全题库系统

    项目运行 环境配置 Jdk1 8 Tomcat7 0 Mysql HBuilderX Webstorm也行 Eclispe IntelliJ IDEA Eclispe MyEclispe Sts都支持 项目技术 SSM mybatis Ma
  • 武汉腾讯前端一面

    腾讯文档前端开发工程师 1 自我介绍 2 项目难点及解决方案 3 Vue双向数据绑定原理 4 diff算法 5 递归实现方式 6 深浅拷贝 object assign 7 跨域原因及解决方式 你公司项目是怎么解决的 8 webpack 9
  • JSON与String字符串相互转换的方法

    首先创建一个简单的类 package com wei demo pojo Author wei Date 2022 6 2 9 24 Version 1 0 public class Teacher private int id priva
  • ASP精华[转]

  • Linux命令:ps

    ps命令 查看系统中的进程状态 ps命令的参数以及作用 参数 作用 a 显示所有进程 包括其他用户的进程 u 用户及其他详细信息 x 显示没有控制终端的进程 Linux系统中时刻运行许多进程 如果能够合理的管理它们 则可以优化系统性能 si
  • js中使用DES加解密解决方案总结

    js中使用DES加解密解决方案总结 1 需求背景 最近开发vue项目中 对于用户手机号码需要进行DES加解密操作 简介 DES加密 是一种比较传统的加密方式 其加密运算 解密运算使用的是同样的密钥 信息的发送者和信息的接收者在进行信息的传输
  • 【MLOps】第 1 章 : 为什么选择它以及现在面临的挑战

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • 常用数组方法总结

    添加 删除元素 push items 从结尾添加元素 pop 从结尾弹出 提取元素 unshift items 从开头添加元素 shift 从开头提取元素 splice pos deleteCount items 从index开始 删除de
  • win10 安装 python报错-已安装这个产品的另一版本

    尝试清理干净电脑上关于之前安装的Python3 在 输入win R 输入cmd 回车 输入 python 回车 却看到 C Users 86136 gt python python 不是内部或外部命令 也不是可运行的程序 或批处理文件 但是
  • Python pd.merge()函数介绍(全)

    目录 1 前言 2 参数介绍 参数如下 3 基础案例 3 1on关键字演示 3 2left on 和 right on 关键字 3 3left index 和 right index 关键字 3 4数据连接的类型 3 4 1 1 前言 在数
  • 4.3 Verilog练习(2)

    目录 练习五 用always块实现较复杂的组合逻辑电路 练习六 在Verilog HDL中使用函数 练习七 在Verilog HDL中使用任务 task 练习八 利用有限状态机进行复杂时序逻辑的设计 练习五 用always块实现较复杂的组合
  • leveldb注释7–key与value

    作为一个kv的系统 key的存储至关重要 在leveldb中 主要涉及到如下几个key user key InternalKey与LookupKey memtable key 其关系构成如下图 user key就是用户输入的key 而Int
  • 华为OD机试 - 第k个排列(Java )

    题目描述 给定参数n 从1到n会有n个整数 1 2 3 n 这n个数字共有n 种排列 按大小顺序升序列出所有排列的情况 并一一标记 当n 3时 所有排列如下 123 132 213 231 312 321 给定n和k 返回第k个排列 输入描
  • 关于校园招聘的感受(汇总)

    对招聘会的法想法 今天春季招聘会在我校的西苑体育馆拉开了序幕 我作为大二的一名学生去看了此次招聘会 进到馆内 第一反应就是一个人 多 人多 单位多 感觉到以后大四毕业就业的压力 那么多学长学姐把自己简历送到各个用人单位 开始面试 考官出的题
  • java 动态代理

    动态代理 这里讲解jdk 动态代理 不讲解cglib动态代理 使用jdk 的InvocationHandler接口与Proxy类实现动态代理 自定义InvocationHandler接口与Proxy类 自定义实现 分析 我们想要实现动态代理
  • dcdc升压计算器excel_优秀DCDC升压

    Figure 1 Basic Application Circuit GENERAL DESCRIPTION The MT3608 is a constant frequency 6 pin SOT23 current mode step
  • pycharm简单使用(Mac):创建一个helloWord

    说明 VSCode是一款轻量级的开发工具 可以支持多款插件这个学习使用确实是一个好的工具 PyCharm是一款Python专门支持的IDE 为什么这里要使用PyCharm呢 PyCharm支持断点调试 1 第一步 创建一个项目 2 第二步
  • CUDA 基础 01 - 概念

    最近在GPU编译器测试方面遇到一些瓶颈 准备学习下cuda 相关的基础知识 warp sm index grid等 CPU VS GPU GPU最重要的一点是可以并行的实现数据处理 这一点在数据量大 运算复杂度不高的条件下极为适用 可以简单
  • 3 Ubuntu上使用Qt运行多线程,设置程序自启动及保护脚本

    Ubuntu上使用Qt运行多线程 设置程序自启动及保护脚本 多线程 自启动及保护脚本 自启动及保护脚本 结束自启动脚本 脚本程序简单说明 设置自启动 多线程 使用多线程时我们需要加入 include lt thread gt 这个头文件包含