VC++中进程与多进程管理的方法
2007-03-25 21:32:55 来源:WEB开发网核心提示: BOOL ret = CreateProcess(NULL, cCommandLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);if (ret) { // 关闭子进程的主线程句柄 CloseHandle(pi.hThread); // 关闭
BOOL ret = CreateProcess(NULL, cCommandLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
if (ret) {
// 关闭子进程的主线程句柄
CloseHandle(pi.hThread);
// 关闭子进程句柄
CloseHandle(pi.hProcess);
}
可以通过dwCreationFlags参数在创建进程时设置子进程的优先级。前面的示例代码在创建子进程时使用的均是默认的优先级,如果要将优先级设置为高,可以修改如下:
BOOL ret = CreateProcess(NULL, cCommandLine, NULL, NULL, FALSE, HIGH_PRIORITY_CLASS, NULL, NULL, &si, &pi);
如果在进程创建时没有特别设置优先级,可以通过SetPriorityClass()函数来动态设定,该函数需要待操作进程的句柄和优先级标识符作为入口参数,函数原型为:
BOOL SetPriorityClass(HANDLE hProcess, DWORD dwPriorityClass);
对于前面没有设定优先级的例子代码,可以在子进程启动后由父进程来动态改变其优先级设置:
SetPriorityClass(pi.hProcess, HIGH_PRIORITY_CLASS);
或是由子进程在其启动后自行改变优先级设置,需要注意的是这时进程句柄应设置为子进程自身的句柄,可通过GetCurrentProcess()函数来获取:
HANDLE hProcess = GetCurrentProcess();
SetPriorityClass(hProcess, HIGH_PRIORITY_CLASS);
进程的互斥运行
正常情况下,一个进程的运行一般是不会影响到其他正在运行的进程的。但是对于某些有特殊要求的如以独占方式使用串行口等硬件设备的程序就要求在其进程运行期间不允许其他试图使用此端口设备的程序运行的,而且此类程序通常也不允许运行同一个程序的多个实例。这就引出了进程互斥的问题。
更多精彩
赞助商链接