线程,进程间的通讯和同步原理及实现用例和应用

线程/进程间的通讯方式

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

—使用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
杀死线程
进程 线程通讯、线程如何同步和通讯、进程同步 线程同步、通讯录测试用例、数据同步测试用例,以便于您获取更多的相关知识。

时间: 2024-11-03 19:25:07

线程,进程间的通讯和同步原理及实现用例和应用的相关文章

线程,进程间的通讯和同步原理,实现用例和应用

线程/进程间的通讯方式 -使用全局变量/共享内存 -使用thread中的lParam参数 -使用socket -使用窗口和消息 -使用命名管道/匿名管道 -使用cmd参数 -使用environment变量 线程的启动,退出和lParam参数通讯 VC: #include <windows.h> DWORD WINAPI ThreadProc(LPVOID lParam); DWORD dwThreadId; HANDLE hThread = CreateThread(NULL, 0, Thre

如何实现进程间数据通讯技术

1.引言 在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯.WIN32 API提供了许多函数使我们能够方便高效地进行进程间的通讯,通过这些函数我们可以控制不同进程间的数据交换,就如同在WIN16中对本地进程进行读写操作一样. 典型的WIN16两进程可以通过共享内存来进行数据交换:(1)进程A将GlobalAlloc(GMEM_SHARE...)API分配一定长度的内存:(2)进程A将GlobalAlloc函数返回的句柄传递给进程B(通过一个登录消息):(3)进程B对这个句柄调用

C#进程间通讯技术-整理。

原文:C#进程间通讯技术-整理.   扩展阅读:http://www.cnblogs.com/joye-shen/archive/2012/06/16/2551864.html   一.进程间通讯的方式 1)共享内存 包括:内存映射文件,共享内存DLL,剪切板. 2)命名管道及匿名管道 3)消息通讯 4)利用代理方法.例如SOCKET,配置文件,注册表方式. 等方式. 方法一:通讯. 进程间通讯的方式有很多,常用的有共享内存(内存映射文件.共享内存DLL.剪切板等).命名管道和匿名管道.发送消息

Android Studio创建AIDL文件并实现进程间通讯实例

在Android系统中,跨进程通信是非常普遍的事情,它用到了Binder机制处理进程之间的交互.Binder机制会开放一些接口给Java层,供android开发工程师调用进程之间通信.这些接口android封装到了AIDL文件里,当我们项目用到跨进程通信时可以创建.aidl文件,.aidl文件可以协助我们达到跨进程的通信.下面简单介绍用AndroidStudio创建AIDL文件的过程. a.新建AIDL文件 1.项目文件夹右键---> new --->选择AIDL 2.自定义一个接口名称 3.

线程及 进程间的通信问题! .

一个很好的编程随想的博客http://program-think.blogspot.com/2009/03/producer-consumer-pattern-0-overview.html 架构设计:生产者/消费者模式[0]:概述  1.如何确定数据单元2.队列缓冲区3.环形缓冲区4.双缓冲区 生产 消费 2010-06-01 10:13   #include <boost/thread/thread.hpp> #include <boost/thread/mutex.hpp>

c++进程间通讯(共享内存)时

问题描述 c++进程间通讯(共享内存)时 我的需求:一个进程批量的数据不间断的存入差不多每秒有400k的数据这样子(不一定是一次存入的,可能是分几次),而另一个内存要从共享内存中读取这些数据,读取完就释放那块内存. 如何使共享的内存具有一定的数据结构,如同stl中的vector那样. 解决方案 需要自己做序列化,反序列化,把数据转回vector.自己定义格式等,知道多大一块内存数据表示一个vector的元素.然后一个个获取,存入vector 解决方案二: 如何使共享的内存具有一定的数据结构?共享

PHP中实现进程间通讯

进程 PHP中实现进程间通讯 邱文宇   本文将讨论在PHP4环境下如何使用进程间通讯机制--IPC(Inter-Process-Communication).本文讨论的软件环境是linux+php4.0.4或更高版本.首先,我们假设你已经装好了PHP4和UNIX, 为了使得php4可以使用共享内存和信号量,必须在编译php4程序时激活shmop和sysvsem这两个扩展模块. 实现方法:在PHP设定(configure)时加入如下选项. --enable-shmop --enable-sysv

在PHP中实现进程间通讯

本文将讨论在PHP4环境下如何使用进程间通讯机制--IPC(Inter-Process-Communication).本文讨论的软件环境是linux+php4.0.4或更高版本.首先,我们假设你已经装好了PHP4和UNIX, 为了使得php4可以使用共享内存和信号量,必须在编译php4程序时激活shmop和sysvsem这两个扩展模块. 实现方法:在PHP设定(configure)时加入如下选项. --enable-shmop --enable-sysvsem  这样就使得你的PHP系统可以处理

Linux进程间通讯-IPC详解

linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的.而对Unix发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间通信方面的侧重点有所不同.前者对Unix早期的进程间通信手段进行了系统的改进和扩充,形成了"system V IPC",通信进程局限在单个计算机内:后者则跳过了该限制,形成了基于套接口(socket)的进程间通信机制.Linux则把两者继承了下来,如图示: 其中,最初Unix IPC包括: