Windows开发:论多进程和多线程 一.简介 二.并发和并行 三.WinSDK 四.C++库文件

在Windows环境下,只有用WinSDK的API函数才能实现,C和C++的库没有支持,但是好像听说C++11以上的版本好像有支持,待我有空去了解

二.并发和并行

1.并行

并行就是同时执行,类似多个CPU同时工作

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
", 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>