Windows开发:论多进程和多线程
一.简介
在Windows环境下,只有用WinSDK的API函数才能实现,C和C++的库没有支持,但是好像听说C++11以上的版本好像有支持,待我有空去了解
二.并发和并行
1.并行
并行就是同时执行,类似多个CPU同时工作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | int a; int b; int c; void F1() { b = a * 2; a = b; } void F2() { c = a + 1; a = c; } main() { a = 5; //Start F1,F2 in parallel F1(); F2(); printf ( "a=%d\n" , a); //a=11 或者a=6 或者a=12 } |
2.并发
并发体现为某一个时刻只能处理一个操作,但是它是有次重点的,类似人脑
多线程就是并发的机制,谁先抢到CPU谁先运行
三.WinSDK
1.WinSDK实现多进程
CreateProcess(
LPCSTR lpApplicationName, //进程名
LPSTR lpCommandLine, //命令行参数
LPSECURITY_ATTRIBUTES lpProcessAttributes, //进程安全属性
LPSECURITY_ATTRIBUTES lpThreadAttributes, //线程安全属性
BOOL bInheritHandles, //安全属性是否继承
DWORD dwCreationFlags, //创建标识符
LPVOID lpEnvironment, //指定进程所使用的环境变量区,LPCSTR lpCurrentDirectory, //设定子进程的工作目录与工作磁盘
LPSTARTUPINFO lpStartupInfo, //开始信息结构体
LPPROCESS_INFORMATION lpProcessInfomation //进程信息结构体
);
- lpCommandLine
搜索可执行文件的顺序:
1.调用者的可执行文件所在目录
2.调用者的目前工作目录
3.Windows目录
4.Windows System目录
5.环境变量中的path所设定的各目录
- dwCreationFlags
CREATE_SUSPENDED表示子进程产生后,父进程立刻暂停执行
- lpEnvironment
NULL表示子进程跟父进程一致
- lpCurrentDirectory
.NULL表示子进程跟父进程一致
- lpProcessInfomation
typedef struct _PROCESS_INFORMATION{
HANDLE hProcess;
HANDLE hThread;
DWORD dwProcessId;
DWORD dwThreadId;
}PROCESS_INFORMATION;
2.WinSDK实现多线程
CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes, //线程的安全属性
DWORD dwStackSize, //堆栈的大小
LPTHREAD_START_ROUTINE lpStartAddress, //执行线程函数名LPVOID lpParameter, //函数的参数
DWORD dwCreationFlags, //创建标志LPDWORD lpThreadId //线程ID
);
- dwCreationFlags
0表示执行线程立刻开始执行
CREATE_SUSPENDED表示要求执行线程暂停执行
四.C++库文件
C++11标准在标准库中为多线程提供了组件,使用C++编写与平台无关的多线程程序成为可能
C++11新标准引进了:<thread> <atomic> <mutex> <future> <condition_variable>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)