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>

 

posted @   言午丶  阅读(845)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示