基于多进程并发-进程的实现

一、Windows平台

1、创建进程函数

BOOL CreateProcessW(
    _In_opt_ LPCWSTR lpApplicationName,// 该字符串可以指定要执行的模块的完整路径和文件名
_Inout_opt_ LPWSTR lpCommandLine,  //命令行

_In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes,
//该 结构确定子进程是否可以继承返回到新进程对象的句柄。如果//lpProcessAttributes为NULL,则不能继承该句柄
_In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes,
//该 结构确定子进程是否可以继承返回到新线程对象的句柄。如果//lpThreadAttributes为NULL,则不能继承该句柄
_In_ BOOL bInheritHandles,
//如果此参数为TRUE,则新进程将继承调用进程中的每个可继承句柄。如果参数为FALSE,则不会继承句柄。请注意,继承的句柄与原始句柄具有相同的值和//访问权限
    _In_ DWORD dwCreationFlags,// 控制优先级类别和流程创建的标志 CREATE_NEW_CONSOLE
_In_opt_ LPVOID lpEnvironment,// 指向新进程的环境块的指针。如果此参数为//NULL,则新进程将使用调用进程的环境
//
    _In_opt_ LPCWSTR lpCurrentDirectory,// 进程当前目录的完整路径
    _In_ LPSTARTUPINFOW lpStartupInfo, //设置扩展属性
    _Out_ LPPROCESS_INFORMATION lpProcessInformation // 该 结构接收有关新进程的标识//信息
    );

2、示例

#include <Windows.h>
#include <stdio.h>


int main() {
    
    
	
	/*_In_ LPSTARTUPINFOW lpStartupInfo,
		_Out_ LPPROCESS_INFORMATION lpProcessInformation*/
	STARTUPINFO lpStartupInfo;
	memset(&lpStartupInfo, 0, sizeof(lpStartupInfo));
	lpStartupInfo.cb = sizeof(lpStartupInfo);
	PROCESS_INFORMATION lpProcessInformation;
	memset(&lpProcessInformation, 0, sizeof(lpProcessInformation));
	TCHAR commandline[] = L"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe";
	int a = CreateProcess(NULL, commandline, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &lpStartupInfo, &lpProcessInformation);
	if (a) {
    
    
		printf_s("Create Success iRet = %d\n", a);
		WaitForSingleObject(lpProcessInformation.hProcess, 3000);
		CloseHandle(lpProcessInformation.hProcess);
		CloseHandle(lpProcessInformation.hThread);
		lpProcessInformation.dwProcessId = 0;
		lpProcessInformation.dwThreadId = 0;
		lpProcessInformation.hProcess = NULL;
		lpProcessInformation.hThread = NULL;
	}
}

3、更多API
1)waitForSingleObject:等待一个内核对象变为已通知状态
2)GetExitCodeProcess:获取推出进程的返回值
3)CreateToolhelp32Snapshot:获取系统快照句柄
4)Process32First/Process32Next:从哪个系统进程快照中获取进程列表
5)TerminateProcess:终止进程
6)SetPriorityClass:设置进程优先级
7)SetThreadPriority:设置线程优先级

二、Qt平台

参考博文:Qt之QprocessQProcess

三、Linux平台

参考博文:多进程编程

如有错误或不足欢迎评论指出!创作不易,转载请注明出处。如有帮助,记得点赞关注哦(⊙o⊙)
更多内容请关注个人博客:https://blog.csdn.net/qq_43148810

猜你喜欢

转载自blog.csdn.net/qq_43148810/article/details/119407115
今日推荐