qt判断指定进程是否处于运行状态

本文介绍了一个使用C++实现的进程检测方法,通过Windows API函数CreateToolhelp32Snapshot和Process32First等,遍历系统中所有进程并判断指定进程是否正在运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <windows.h>
#include <tlhelp32.h>

判断进程是否处于运行状态
bool CProcessManager::isProcessRunning(QString processName)
{
bool ret = false;
HANDLE proHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if ((HANDLE)-1 == proHandle)
{
return false;
}

//进程信息
PROCESSENTRY32 pInfo;
pInfo.dwSize = sizeof(PROCESSENTRY32);

//获得第一个进程
BOOL bResult = Process32First(proHandle, &pInfo);
if (!bResult)
{
	return false;
}

QString curProcessName;  //proUrl, proPid;
while (bResult)
{
	curProcessName = QString("%1").arg(QString::fromUtf16(reinterpret_cast<const unsigned short *>(pInfo.szExeFile)));

	if (curProcessName == processName)
	{
		ret = true;
		break;
	}

	//获得下一个进程
	bResult = Process32Next(proHandle, &pInfo);
}

//关闭句柄
CloseHandle(proHandle);
return ret;

}

在C语言中实现银行家算法通常涉及到数据结构、并发控制和条件变量。这里提供一个简单的框架,但无法直接生成可视化图形,因为这通常需要图形库或者Web前端技术。下面是一个基本的银行家算法核心代码示例: ```c #include <stdio.h> #include <stdlib.h> #include <pthread.h> #define MAX_PROCS 10 #define MAX_RES 5 typedef struct { int pid; // 进程ID int reqs[MAX_RES]; // 请求的资源量 int allocs[MAX_RES]; // 已分配的资源量 int in_use[MAX_RES]; // 正在使用的资源量 } Process; Process procs[MAX_PROCS]; int m, n; // 资源种类数和进程数 // 定义资源矩阵 int resources[MAX_RES][MAX_PROCS]; // 银行家函数 int banker(int pid, int* allocation) { int deadlock = 0; for (int i = 0; i < m; i++) { if (resources[i][pid] == 0 && procs[pid].reqs[i]) { deadlock |= is_safe(pid, i); } } if (!deadlock) { for (int i = 0; i < m; i++) { allocation[i] = min(procs[pid].reqs[i], resources[i][pid]); } return 1; // 分配成功 } else { return 0; // 分配失败 } } // 判断是否安全 int is_safe(int pid, int res) { for (int i = 0; i < n; i++) { if (procs[i].in_use[res] > 0 && (procs[i].allocs[res] + procs[pid].reqs[res]) > procs[i].reqs[res]) { return 1; } } return 0; } // 用于线程同步的信号量 sem_t sem_lock, sem_will_wait; void* alloc_resources(void* arg) { int pid = *((int*)arg); while (banker(pid, procs[pid].allocs)) { // 更新资源矩阵 for (int i = 0; i < m; i++) { resources[i][pid] -= procs[pid].allocs[i]; } // 如果所有资源分配完毕,释放进程 if (memcmp(procs[pid].allocs, procs[pid].reqs, sizeof(procs[pid].allocs)) == 0) pthread_exit(0); } return NULL; } int main() { // 初始化资源矩阵和进程信息 // ... // 创建进程并启动分配资源 for (int i = 0; i < n; i++) { pthread_create(&procs[i].thread, NULL, alloc_resources, &i); } // 等待所有进程结束 for (int i = 0; i < n; i++) { pthread_join(procs[i].thread, NULL); } printf("资源分配结束,没有死锁发生。\n"); return 0; } ``` 请注意,这个例子只是一个简化版的银行家算法,实际应用中可能需要更复杂的错误处理和通信机制,以及可视化部分通常会使用专门的图形库或前端框架,如tkinter(Python)、Qt(C++)等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值