CreateThread使用说明

函数原型:

HANDLE CreateThread(
  LPSECURITY_ATTRIBUTES   lpThreadAttributes,
  SIZE_T                  dwStackSize,
  LPTHREAD_START_ROUTINE  lpStartAddress,
  __drv_aliasesMem LPVOID lpParameter,
  DWORD                   dwCreationFlags,
  LPDWORD                 lpThreadId
);

参数说明:

lpThreadAttributes

指向SECURITY_ATTRIBUTES 结构的指针,该结构确定子进程是否可以继承返回的句柄。如果 lpThreadAttributes为NULL,则无法继承句柄。

结构的lpSecurityDescriptor成员为新线程指定安全描述符。如果lpThreadAttributes为NULL,则线程获取默认安全描述符。

dwStackSize

线程堆栈的初始大小,以字节为单位。如果此参数为零,则新线程使用可执行文件的默认大小。

lpStartAddress

指向由线程执行的应用程序定义函数的指针。该指针表示线程的起始地址。

lpParameter

要传递给新建线程的命令行参数。

dwCreationFlags

控制线程创建的标志。

含义

0

该线程在创建后立即运行。

CREATE_SUSPENDED

0x00000004

线程是在挂起状态下创建的,并且在调用ResumeThread函数之前不会运行 。

STACK_SIZE_PARAM_IS_A_RESERVATION

0x00010000在

所述dwStackSize参数指定堆栈的初始保留大小。如果未指定此标志,则dwStackSize指定提交大小。

lpThreadId

指向新建线程的ID号。如果此参数为 NULL,则不返回线程标识符。

代码实例:

// CreateThread.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <windows.h>

using namespace std;

DWORD WINAPI Fun1( LPVOID lpParam );
DWORD WINAPI Fun2( LPVOID lpParam ); //必须加参数,否则创建线程失败。提示无法将参数 3 从“DWORD (__stdcall *)(void)”转换为“LPTHREAD_START_ROUTINE”

int main()
{
    HANDLE h1 = CreateThread( NULL, 0, Fun1, NULL, 0, NULL );
    cout << "Thread1 create." << endl;

    HANDLE h2 = CreateThread( NULL, 0, Fun2, NULL, 0, NULL );
    cout << "Thread2 create." << endl;

    while( 1 )
    {
        if( getchar() == 'q' )
        {
            CloseHandle( h1 );//不会直接关闭线程,只是递减线程中的内核对象使用计数。当使用计数为0时,释放内核对象
            CloseHandle( h2 );
            return 0;
        }
        else
        {
            Sleep( 1000 );
        }
    }

    system( "pause" );
    return 0;
}

DWORD WINAPI Fun1( LPVOID lpParam )
{
    while( 1 )
    {
        cout << "Thread1 is running." << endl;
        Sleep( 900 ); //暂停当前线程,从等待的线程中执行
    }

    return 0;
}

DWORD WINAPI Fun2( LPVOID lpParam )
{
    while( 1 )
    {
        cout << "Thread2 is running." << endl;
        Sleep( 900 );
    }

    return 0;
}

结果说明:

运行后可知,线程的运行结果并没有按照代码的顺序而执行,这就涉及到后面的线程同步了。

  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CreateThread()函数的参数说明如下: 1. lpThreadAttributes:指向SECURITY_ATTRIBUTES结构的指针,用于指定线程对象的安全描述符。可以通过该参数控制线程对象的继承性和访问权限。如果不需要对线程对象进行安全控制,可以传入NULL。 2. dwStackSize:指定线程堆栈的大小,以字节为单位。可以通过该参数设置线程的堆栈大小。如果传入0,则使用默认的堆栈大小。 3. lpStartAddress:线程的入口点函数指针,即线程开始执行的函数。该函数必须是静态的或全局的,并且具有以下形式:DWORD WINAPI ThreadFunc(LPVOID lpParameter)。其中lpParameter是传递给线程入口点函数的参数。 4. lpParameter:传递给线程入口点函数的参数。可以是任意类型的数据,通过该参数可以向线程传递数据或指定线程的行为。 5. dwCreationFlags:用于控制线程的创建标志。可以通过该参数设置一些附加选项,如创建线程时是否立即运行、创建线程时是否继承调用线程的环境等。 6. lpThreadId:指向DWORD类型变量的指针,用于接收新创建线程的ID。可以通过该参数获取新线程的ID,以便后续操作和管理。 CreateThread()函数返回一个HANDLE类型的值,该值表示新创建线程的句柄。可以使用该句柄来操作和管理线程,例如等待线程结束、挂起或恢复线程等。 需要注意的是,CreateThread()函数是一个底层的线程创建函数,对于C++开发者来说,可以选择使用更高级的线程库,如C++11标准库中的std::thread类,或者跨平台的线程库,如Boost.Thread。这些库提供了更方便、可移植的线程创建和管理方式,适用于不同的开发环境和平台。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值