Welcome

首页 / 软件开发 / C++ / 线程,进程间的通讯和同步原理及实现用例和应用

线程,进程间的通讯和同步原理及实现用例和应用2015-02-20线程/进程间的通讯方式

—使用全局变量/共享内存

—使用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)

CreateFileMappingMapViewOfFileUnmapViewOfFileCloseHandle共享内存实现用例ShmSample