这是进程的创建,不是多线程……
1、创建新进程程序路径
CString strFilePath1 = "D:\\11.EXE"; //新进程执行程序
2、新进程参数初始化
PROCESS_INFORMATION pt;
STARTUPINFO si; //PC版这个参数不加,会导致创建进程出错,wce不用,直接为NULL
memset(&pt, 0, sizeof(pt));
memset(&si, 0, sizeof(si));
3、调用创建进程函数
if(!CreateProcess(strFilePath1, NULL, NULL, NULL, true,0 , NULL, NULL, &si, &pt))
{
AfxMessageBox(_T("CreateProcess err!"));
DWORD err = GetLastError();
AfxMessageBox(CString(_T("err = %d"), err));
return;
}
WaitForSingleObject(pt.hProcess, INFINITE);
CloseHandle(pt.hProcess);
CloseHandle(pt.hThread);
4、改变优先级
可以通过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);
完毕,使用以上即可创建进程成功,自己VC6.0测试成功