• 015 线程创建


    线程 
      ● 进程启动
        ○ 进程内核对象 进程空间
        ○ 线程
      ● 可以通过IDE设置入口函数
      ● 自己创建线程
        ○ 创建线程函数 CreateThread()
        ○ 新建线程内核对象(结构体)
      ● 线程
        ○ 分配一块内存空间,作为当前线程的堆栈
        ○ 两条在同一进程内线程,都是隔离的
        ○ 线程他们是封闭的,每个线程都有自己的一个堆栈
        ○ 但是都是属于当前进程内的堆栈
        ○ 进程赋予了线程交互的能力
      ● 线程创建

    1 HANDLE WINAPI CreateThread(
    2 _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes,
    3 _In_ SIZE_T dwStackSize,
    4 _In_ LPTHREAD_START_ROUTINE lpStartAddress,
    5 _In_opt_ LPVOID lpParameter,
    6 _In_ DWORD dwCreationFlags,
    7 _Out_opt_ LPDWORD lpThreadId
    8 );

    参数1:lpThreadAttributes
      NULL使用默认安全性,不可以被子线程继承,否则需要定义一个结构体将它的bInheritHandle成员初始化为TRUE
    参数2:dwStackSize
      设置初始栈空间的大小,可以设置数值,也可以不设置数值,不设置的话由抱编译器保留大小一般默认位1MB
    参数3:lpStartAddress
      指向线程函数入口 的指针 线程开始的地址
    参数4:lpParameter
      向线程函数传递的参数,是一个指向结构的指针,不需传递参数时,为NULL。
    参数5:dwCreationFlags
      线程标志,可取值如下
        CREATE_SUSPENDED(0x00000004):创建一个挂起的线程
        STACK_SIZE_PARAM_IS_A_RESERVATION(0x00010000):dwStackSize参数指定初始的保留堆栈 的大小,  否   则,dwStackSize指定提交的大小
    参数6:lpThreadId
      保存新线程的id

      ● 主线程退出和其他线程退出的区别
      ● 主线程退出 代表进程结束,全部线程推出
      ● 子线程主线程退出,子线程主线程会执行完成后才会退出

     1 #include <stdio.h>
     2 #include <tchar.h>
     3 #include <windows.h>
     4 
     5 //启动了线程mainStartup
     6 
     7 DWORD __stdcall MyMain1(LPVOID lParam)
     8 {
     9     int nParam = (int)lParam;
    10     _tprintf(TEXT("nParam = %d
    "),nParam);
    11     return 0;
    12 
    13 }
    14 
    15 DWORD __stdcall MyMain(LPVOID lParam)
    16 {
    17     int nParam = (int)lParam;
    18     HANDLE  hThread = CreateThread(nullptr,0,MyMain1,(LPVOID)0x64,0,nullptr);
    19     CloseHandle(hThread);
    20     Sleep(1);
    21     _tprintf(TEXT("nParam = %d
    "),nParam);
    22     return 0;
    23 }
    24 
    25 int main()    //主线程 线程看书
    26 {
    27     HANDLE  hThread = CreateThread(nullptr,0,MyMain,(LPVOID)0xFFFFFFFF,0,nullptr);
    28     CloseHandle(hThread);    //记得关闭线程
    29 
    30     while(true)
    31     {
    32         Sleep(100);
    33     }
    34 
    35 
    36     return 0;
    37 }

  • 相关阅读:
    Struts2+Spring2+Hibernate3 web应用示例(一)
    第二版序言
    Struts2+Spring2+Hibernate3 web应用示例(四)
    Struts2+Spring2+Hibernate3 web应用示例(六)
    终于轻松了
    Struts2+Spring2+Hibernate3 web应用示例(三)
    Dojo实用API
    AJAX实例入门
    JeffChen » C语言常用宏定义技巧
    FUZZ测试方法介绍
  • 原文地址:https://www.cnblogs.com/sdk123/p/7003558.html
Copyright © 2020-2023  润新知