zoukankan      html  css  js  c++  java
  • Windows开发:论多进程和多线程

    一.简介

    在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>

  • 相关阅读:
    [NOIP2017 TG D2T2]宝藏(模拟退火)
    [洛谷P1337][JSOI2004]平衡点 / 吊打XXX
    [洛谷P4940]Portal2
    [CF1073E]Segment Sum
    [CF1066C]Books Queries
    [CF1065C]Make It Equal
    [洛谷P3469][POI2008]BLO-Blockade
    网络模型 ------->MobileNet-v3
    C++--------------------->>>>>>cmakelist的编写
    C++ ----------------》》》》》cmake list的
  • 原文地址:https://www.cnblogs.com/k5bg/p/11124671.html
Copyright © 2011-2022 走看看