• 进程一


    #include<stdio.h>
    #include<windows.h>
    int i = 1;
    
    DWORD WINAPI ThreadProc(LPVOID lpParameter)
    {
        for(int i = 0; i < 1000; i++){
            Sleep(1000);
            printf("-------------------------
    ");
        }
        return 0;
    }
    
    void Test()
    {
        HANDLE  p = ::CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL);
        ::CloseHandle(p);
        
    }
    int main()
    {
        Test();
        for(int i = 0; i < 1000; i++)
        {
            Sleep(1000);
            printf("++++++++++++++++++++++++
    ");
        }
        return 0;
    }

    HANDLE CreateThread(
    LPSECURITY_ATTRIBUTES lpThreadAttributes, // 安全属性 通常为NULL
    SIZE_T dwStackSize, // 参数用于设定线程可以将多少地址空间用于它自己的堆栈
    // 每个线程拥有它自己的堆栈
    LPTHREAD_START_ROUTINE lpStartAddress, // 参数用于指明想要新线程执行的线程函数的地址
    LPVOID lpParameter, // 线程函数的参数
    // 在线程启动执行时将该参数传递给线程函数
    // 既可以是数字,也可以是指向包含其他信息的一个数据结构的指针
    DWORD dwCreationFlags, // 0 创建完毕立即调度 CREATE_SUSPENDED创建后挂起
    LPDWORD lpThreadId // 线程ID
    );
    // 返回值:线程句柄

    线程句柄与线程ID:

    线程是由Windows内核负责创建与管理的,句柄相当于一个令牌,有了这个令牌就可以使用线程对象.

    线程ID是身份证,唯一的,系统进行线程调度的时候要使用的.

    创建线程代码:

    //创建一个新的线程
    HANDLE hThread = ::CreateThread(NULL, 0, ThreadProc,
    NULL, 0, NULL);

    //如果不在其他的地方引用它 关闭句柄
    ::CloseHandle(hThread);

    线程函数:

    DWORD WINAPI ThreadProc(
    LPVOID lpParameter // thread data



    向线程函数传递变量的两种方式:

    (1) 全局变量

    (2) 线程参数

  • 相关阅读:
    解决Vss链接问题清除Windows共享登录的用户名密码记录(转)
    C# 激活正在运行的程序
    Log4Net 使用方法
    对Javascript闭包的一些理解
    根据数据库获取表名集合,根据表名获取字段信息
    C#引用类型和值类型的区别(转)
    c++强制类型转换:dynamic_cast、const_cast 、static_cast、reinterpret_cast
    理解VC工程文件类型
    MFC中的UpdateData()
    字节对齐
  • 原文地址:https://www.cnblogs.com/Lu3ky-Athena/p/13697000.html
Copyright © 2020-2023  润新知