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

avatar
作者
猴君
阅读量:0

_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创建一个新线程,并将其挂起。接着,我们恢复线程的执行,并等待它完成(这一步是可选的)。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!