Windows下多线程编程

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

线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程(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 
#include 
#include 
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下多线程编程_第1张图片
多线程编程运行结果

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

你可能感兴趣的:(Windows下多线程编程)