当前位置: 首页 > news >正文

郑州市做网站的公seo排名赚

郑州市做网站的公,seo排名赚,广州外贸网站建设,深圳宝安大型网站建设公司Qt 进程守护程序 简单粗暴的监控,方法可整合到其他代码。 一、windows环境下 1、进程查询函数 processCount函数用于查询系统所有运行的进程中该进程运行的数量,比如启动了5个A进程,该函数查询返回的结果就为5。 windows下使用了API接口查询…

Qt 进程守护程序

简单粗暴的监控,方法可整合到其他代码。

一、windows环境下
1、进程查询函数
processCount函数用于查询系统所有运行的进程中该进程运行的数量,比如启动了5个A进程,该函数查询返回的结果就为5。
windows下使用了API接口查询进程信息,该函数纯C++无Qt库相关代码,注释对代码进行了详细解释。

int processCount(const char*  processName)
{int countProcess = 0;//CreateToolhelp32Snapshot 获取系统中正在运行的进程信息,线程信息等HANDLE toolHelp32Snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);if (((int)toolHelp32Snapshot) != -1){PROCESSENTRY32 processEntry32;processEntry32.dwSize = sizeof(processEntry32);if(Process32First(toolHelp32Snapshot, &processEntry32))      //判断进程获取首进程是否存在{do{int iLen = 2 * wcslen(processEntry32.szExeFile);    //wcslen - 计算宽字符串的长度char* currentProcessName = new char[iLen + 1];wcstombs(currentProcessName, processEntry32.szExeFile, iLen + 1);    //将宽字符转换成多字符if (strcmp(processName, currentProcessName) == 0)      //对比进程名countProcess++;delete []currentProcessName;}while (Process32Next(toolHelp32Snapshot, &processEntry32));     //进程获取函数,获取下一个进程名}//关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等。CloseHandle(toolHelp32Snapshot);}return countProcess;
}

2、进程守护代码
进程守护其实就是使用一个进程去定时查询另外一个被守护的进程是否存在,不存在则需要启动该进程。代码如下,运行时,首先需要获取被守护的进程APP,使用读取配置文件的方式,如果配置文件不存在(首次启动该代码),则需要选择被守护的进程,然后将选择的APP路劲存入配置文件,供下次启动读取使用。

#include <QApplication>
#include <QFileDialog>
#include <QSettings>
#include <windows.h>
#include <QDebug>
#include <QDateTime>int main(int argc, char *argv[])
{QSettings sets("sys.ini", QSettings::IniFormat);QString targetExePath = sets.value(KEY_EXE_PATH).toString();if ("" == targetExePath){//首次需要选择 被守护的进程QString exepath = QFileDialog::getOpenFileName(nullptr, "选择程序", "D:/", "Exe files (*.exe)");if ("" != exepath)sets.setValue(KEY_EXE_PATH, exepath);       //写入配置文件}while (1)        //死循环,不断查询判断{//targetExePath = sets.value(KEY_EXE_PATH).toString();QString exeName = targetExePath.split('/').last();QDateTime strtTime = QDateTime::currentDateTime();int countProcess = processCount(exeName.toStdString().c_str());   // 查询该进程运行数量qDebug()<<"use times for Query process:"<<strtTime.msecsTo(QDateTime::currentDateTime())<<"(ms)   countProcess:"<<countProcess;if (countProcess == 0)system(targetExePath.toStdString().c_str());        //关闭状态 重启进程,注意:这里实际运行会阻塞在这里,一直等到被守护的线程结束。Sleep(3000);}
}

二、linux环境下
1、进程查询函数

原理: 使用 popen函数 + pidof命令 查询对应进程的pid,该方法的缺点就是不能像windows那样读取所有进程名从而获取该进程运行的数量。所以,如果一个程序加载多个进程(同程序进程名相同,pid不同),使用该方法只能获取最后一个启动的进程pid。

popen属于标准I/O函数库中函数,使用该函数启动另外一个进程去执行一个shell命令行。
这里我们称调用popen的进程为父进程,由popen启动的进程称为子进程。
popen函数还创建一个管道用于父子进程间通信。父进程要么从管道读信息,要么向管道写信息,至于是读还是写取决于父进程调用popen时传递的参数。

实现函数如下,函数参数输入进程名,返回进程的pid,如果返回0,则表示进程不存在或未运行。

void Widget::watchdog()
{//守护进程QTimer* updateTimer = new QTimer(this);connect(updateTimer, SIGNAL(timeout()), this, SLOT(checkApp()));updateTimer->start(300);
}
void Widget::checkApp()
{if (getProcessPidByName("AppName") == 0) {system("cd /sdcard");system("./AppName &");qDebug() << "";qDebug() << "  _  __                        _____  _                                 ";qDebug() << " | |/ /                       / ____|| |                                ";qDebug() << " | ' /   __ _  _ __    __ _  | |     | |__   _   _   __ _  _ __    __ _ ";qDebug() << " |  <   / _` || '_ \\  / _` | | |     | '_ \\ | | | | / _` || '_ \\  / _` |";qDebug() << " | . \\ | (_| || | | || (_| | | |____ | | | || |_| || (_| || | | || (_| |";qDebug() << " |_|\\_\\ \\__,_||_| |_| \\__, |  \\_____||_| |_| \\__,_| \\__,_||_| |_| \\__, |";qDebug() << "                      __/  |                                      __/  |";qDebug() << "                     |____/                                      |____/ ";qDebug() << "";}
}
int Widget::getProcessPidByName(const char* proc_name)
{FILE* fp;char buf[100];char cmd[200] = { '\0' };int pid = -1;sprintf(cmd, "pidof %s", proc_name);if ((fp = popen(cmd, "r")) != NULL) {if (fgets(buf, 255, fp) != NULL)pid = atoi(buf);}pclose(fp);return pid;
}
http://www.qdjiajiao.com/news/7317.html

相关文章:

  • 外贸推广邮件石家庄seo关键词排名
  • 做网站优化有什么作用怎样策划一个营销型网站
  • 合肥有哪些做网站的公司重庆百度seo公司
  • 企业微网站怎么做网络广告宣传平台
  • 铜陵网站制作外贸推广
  • 双城网站建设哪家好网址推广
  • 做网站seo优化国外域名注册
  • 沈阳哪有做网站的搜狗搜索引擎优化
  • 传奇广告网站怎么做深圳外包seo
  • 校园网站建设招标公告网络市场的四大特点
  • 域名查询站长之家宁波免费建站seo排名
  • 建设部指定发布招标信息网站seo外包服务方案
  • 长沙网站托管哪家好南京seo优化培训
  • 5网站开发百度统计收费吗
  • 安徽有几家做网站电商运营推广怎么做
  • 上海c网站建设使用 ahrefs 进行 seo 分析
  • 东莞微网站建设服务成人营销管理培训班
  • 合肥网站建设q479185700強沈阳seo排名收费
  • 网站建设与管理教材爱站网反链查询
  • 惠州做网站 百度优化最新实时新闻
  • 聚美优品网站建设友情链接的作用大不大
  • 做电影网站用什么软件叫什么百度上海推广优化公司
  • 怎么做外围网站的代理网站收录情况
  • php网站开发数据列表排重百度app交易平台
  • 柳州建设网app成都seo正规优化
  • 做网站 美国服务器哪里好品牌推广渠道有哪些
  • 做网站上传图片百度高级搜索页面
  • 免费网站设计 优帮云seo优化软件有哪些
  • 中国空间站有多大seo快速排名工具
  • 免费网站下载直播软件如何让网站快速收录