线程/进程间的通讯方式
—使用全局变量/共享内存
—使用thread中的lParam参数
—使用socket
—使用窗口和消息
—使用命名管道/匿名管道
—使用cmd参数
—使用environment变量
线程的启动,退出和lParam参数通讯
VC: #include <windows.h> DWORD WINAPI ThreadProc(LPVOID lParam); DWORD dwThreadId; HANDLE hThread = CreateThread(NULL, 0, ThreadProc, lParam, 0, &dwThreadId); ::TerminateThread(hThread, 0) //杀死线程,强烈不推荐使用! ::WaitForSingleObject(hThread, INFINITE) //等待线程退出 ::CloseHandle(hThread); //不再关心该线程 ::GetExitCodeThread (); //获取线程退出代码
.Net: Using System.Threading; Static void ThreadProc(Object lParam) Object lParam = null; Thread th = new Thread(new ParameterizedThreadStart(ThreadProc)); th.Start(lParam); th.IsBackground = true; // 主循环结束后依靠.Net运行机制自动取消该线程 th.Join(); //等待线程退出 th.Abort(); //杀死线程
进程的启动,退出,命令行和环境变量
VC: #include <windows.h> STARTUPINFO si = sizeof(STARTUPINFO) }; PROCESS_INFORMATION ps; Char* pFileName = …; Char* pArgs = …; LPVOID pEnv = NULL; BOOL bRet = CreateProcess(pFileName, pArgs, …, pEnv, NULL, &si, &ps); ::TerminateProcess(ps.hProcess, 0) //杀死进程,不推荐使用,但比TerminateThread强很多。 ::WaitForSingleObject(ps.hProcess, INFINITE) //等待进程退出 ::CloseHandle(ps.hProcess); // 不再关心该进程 ::GetExitCodeProcess(); //获取进程退出代码
.Net: Using System.Diagnotics; Process p = new Process(); p.StartInfo = new ProcessStartInfo(); p.StartInfo.FileName = …; p.StartInfo.Arguments = …; p.StartInfo.EnvironmentVariables = …; p.Start(); p.WaitForExit(); //等待进程退出 p.Kill(); //杀死进程 p.ExitCode // 获取进程退出代码
管道通讯
创建匿名管道(读管道和写管道) BOOL WINAPI CreatePipe( PHANDLE hReadPipe, PHANDLE hWritePipe, LPSECURITY_ATTRIBUTES lpPipeAttributes, DWORD nSize); 销毁匿名管道 BOOL WINAPI CloseHandle( HANDLE hPipe ); 管道通讯用例NPSample
共享内存(VC)
CreateFileMapping MapViewOfFile UnmapViewOfFile CloseHandle 共享内存实现用例ShmSample
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索线程
, 变量
, 通讯
, 进程
, 匿名管道 readfile
, exitcode
, lparam
, 等待匿名线程
, 管道
, 同步退出
, 匿名管道
, 进程间通讯
, 线程操作系统winapi
杀死线程
进程 线程通讯、线程如何同步和通讯、进程同步 线程同步、通讯录测试用例、数据同步测试用例,以便于您获取更多的相关知识。