温馨提示×

如何正确使用C++中的_beginthreadex

c++
小樊
90
2024-10-09 19:10:14
栏目: 编程语言

_beginthreadex是C++标准库中的一个函数,用于创建一个新的线程。这个函数的原型如下:

unsigned long WINAPI _beginthreadex(
  void *arg, 
  unsigned int stackSize, 
  void (WINAPI *threadfunc)(void *), 
  void *arg2, 
  unsigned int creationFlags, 
  unsigned long *threadId
);

参数解释:

  • arg:传递给线程函数的参数。
  • stackSize:线程的堆栈大小,以字节为单位。如果为0,则使用默认堆栈大小。
  • threadfunc:线程函数,该函数应该返回一个DWORD值,并接受一个void*参数。
  • arg2:传递给线程函数的另一个参数。
  • creationFlags:创建标志,用于控制线程的创建方式。例如,CREATE_SUSPENDED表示创建一个挂起的线程,CREATE_NO_WINDOW表示创建的线程不拥有窗口句柄。
  • threadId:指向一个新线程的ID的指针。如果此参数为NULL,则不返回线程ID。

下面是一个简单的示例,展示如何使用_beginthreadex创建一个新线程:

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

DWORD WINAPI ThreadFunction(void* arg) {
    std::cout << "Hello from the new thread!" << std::endl;
    return 0;
}

int main() {
    unsigned long threadId;
    if (_beginthreadex(NULL, 0, ThreadFunction, NULL, CREATE_SUSPENDED, &threadId) == 0) {
        std::cout << "Failed to create thread." << std::endl;
        return 1;
    }

    std::cout << "Thread created with ID: " << threadId << std::endl;

    // Resume the thread
    ResumeThread(GetCurrentThread(), 0);

    // Wait for the thread to finish (optional)
    WaitForSingleObject(GetCurrentThread(), INFINITE);

    return 0;
}

在这个示例中,我们定义了一个名为ThreadFunction的线程函数,它只是简单地输出一条消息。然后,在main函数中,我们使用_beginthreadex创建一个新线程,并将其挂起。接着,我们恢复线程的执行,并等待它完成(这一步是可选的)。

0