操作系统——MFC实现进程创建和通信1

引入

操作系统之进程创建与通信
在同一个解决方案下,创建两个进程,并实现两者间的通信。

实现进程创建

进程创建原理

进程:资源分配的基本单位,独立执行的基本单位
线程:实质为进程内的一个执行单元、进程内的一个可调度实体、程序/进程中一个相对独立的控制流序列、执行的上下文(执行的现场数据+其他调度所需信息)、CPU使用的基本单位,由线程IP、程序计数器、寄存器集合、栈,具有与同一个进程的其他线程共享代码段、数据段等操作系统资源的特点,一般在执行中线程的调度是随意的,并不是代码中先写就先跑。
进程创建:操作系统执行程序的需要或者用户或进程要求创建一个新的进程。进程创建首先是在进程表中为进程建立一个进程控制块PCB,采用fork()系统调用将复制执行进程的PCB块,U区和内存图像到新的进程。
在Linux中我们可以使用fork()函数创建子进程方法为完全复制父进程的内容赋予子进程,之后的内容都由父子进程两方执行;对于fork()函数的返回值,父进程返回子进程的序号,子进程返回0。exec函数族的函数用于赋予子进程不同功能,主要通过链接其他已编译文件,使得子进程能够执行其功能。pthread函数是线程相关的函数,如pthread_create()函数创建线程,pthread_join()函数阻塞进程,pthread_mutex_lock、pthread_mutex_trylock、pthread_mutex_unlock执行互斥锁相关内容。
在window是中我们可以使用CreateProcess()函数实现。具体详解可以看看CSDN windows下创建进程,CreateProcess()详解及用法我就不一 一赘述了。

1、使用VS搭建一个基于对话框的MFC应用

创建解决方案
创建解决方案
项目名称自己定,文件位置路径不要出现中文,不然可能出现各种各样奇怪的编译问题。
在这里插入图片描述
基于对话框创建
在这里插入图片描述
在资源视图IDD_MFCAPPLICATION1_DIALOG中编辑界面,工具栏中有很多好用的插件,加上EDIT控件和几个Button控件,配置一下属性,一个简易的界面就做好了,当然现在的Button是没有加上槽的。
在这里插入图片描述

2、再在同一个解决方案下编辑子项目B

在这里插入图片描述
(我这里取名叫chileProcess)
同样的我们在资源视图中加上一些控件,后续我们再做每个Button控件的槽。
在这里插入图片描述

3、处理创建进程

双击button转到槽中编写处理程序。
在这里插入图片描述

void CMFCApplication1Dlg::OnBnClickedOk2()
{
	PROCESS_INFORMATION pi = { 0 };//进程信息结构
	STARTUPINFO si = { 0 };//启动信息结构
	si.cb = sizeof(si);
	si.wShowWindow = SW_SHOW;//显示窗口
	si.dwFlags = STARTF_USESHOWWINDOW;//启动标志,显示窗口
	::CreateProcess(
		//这个要改为自己的项目文件的路径位置,如果相对路径无法定位文件,就改为绝对路径先用着
		TEXT("./Debug/ChileProcess.exe"),//可执行文件(exe)或模块路径
		nullptr,//命令行参数 
		nullptr,//默认进程安全性 
		nullptr,//默认线程安全性
		FALSE,  //指定当前进程内局部不可以被子进程继承 
		CREATE_DEFAULT_ERROR_MODE,      //创建进程的标志,这里设为0,不需要
		nullptr,//使用本进程的环境变量
		nullptr,//使用本进程的驱动器和目录
		&si, &pi);
}

这是用CreateProcess方法去新开启一个子进程,Text中写的就是自己项目构建后生成的二进制文件。现在就可以生成进程B,实现创建了

编译项目

右键点击childProcess项目,生成一下子窗口项目
在这里插入图片描述
可以查看一下解决 方案中的启动项目是哪一个,默认是单启动一个项目就是主进程,这里我们不需要改就是只有一个主进程,然后主进程点击事件创建子进程B。
在这里插入图片描述
然后运行解决方案就可以点击button去创建子进程B了。
在这里插入图片描述


剩下的实现消息通信的button,我在另一个博客上继续。
操作系统——MFC实现进程创建和通信2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AlbertOS

还会有大爷会打钱?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值