美文网首页
Windows下多线程编程

Windows下多线程编程

作者: Steve2017 | 来源:发表于2017-11-01 20:25 被阅读0次

    在嵌入式编程中,经常会用到中断来对一些必要请求进行及时响应,同时又不占用太多系统资源。然而在Windows环境下进行编程,如何实现类似功能,则需要用到『线程』编程,线程在Wikipedia上的定义如下:

    线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix System VSunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。

    Windows下多线程编程

    Windows下多线程编程可以利用Windows SDK提供的函数CreateThread()创建线程,在使用时需要包含头文件Windows.h。根据微软开发者中心的介绍,CreateThread()函数定义如下:

    HANDLE WINAPI CreateThread(
    LPSECURITY_ATTRIBUTES lpsa,
    DWORD cbStack,
    LPTHREAD_START_ROUTINE lpStartAddr,
    LPVOID lpvThreadParam,
    DWORD fdwCreate,
    LPDWORD lpIDThread
    );
    

    参数简介:

    1. LPSECURITY_ATTRIBUTES lpsa 是安全树形结构体,主要控制该线程的句柄可否为进程的子进程继承使用,默认使用NULL表示不能继承;若想继承线程句柄,则需要设置改结构体,将结构体的bInheritHandle成员初始化为TRUE;
    2. DWORD cbStack表示线程初始栈的大小,若是0则表示默认大小初始化;
    3. LPTHREAD_START_ROUTINE lpStartAddr 表示线程开始的位置,即函数入口位置;
    4. LPVOID lpvThreadParam用来接收线程过程函数的参数,不需要时可以设置为NULL;
    5. DWORD fdwCreate表示线程创建时的标志,CREATE_SUSPENDED表示线程创建后挂起暂不执行,必须调用ResumeThread才可以执行,0表示线程创建后立即执行;
    6. LPDWORD lpIDThread保存线程的ID

    Windows下多线程编程实例

    #include <iostream>
    #include <Windows.h>
    #include <stdio.h>
    using namespace std;
    
    DWORD WINAPI ThreadFcn(LPVOID pParam)
    {
        int i = 0;
        while (i++ < 10)
        {
            printf("线程开启成功,第%d次运行线程1\n",i);
        }
        return 0;
    }
    
    int main()
    {
        //创建线程
        HANDLE hThread = CreateThread(NULL, 0, ThreadFcn, NULL, 0, NULL);
    
        //关闭线程
        CloseHandle(hThread);
    
        int j = 0;
        while(j++ < 5)
        {
            printf("第%d次运行主线程\n",j);
        }
        system("pause");
        return 0;
    }
    

    运行结果如下图所示:


    多线程编程运行结果

    从结果可以看出,两个线程明显是并行运行的,运行过程中互不干扰。

    相关文章

      网友评论

          本文标题:Windows下多线程编程

          本文链接:https://www.haomeiwen.com/subject/cmggpxtx.html