溫馨提示×

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

c++
小樊
81
2024-10-09 19:10:14
欄目: 編程語言

_beginthreadex是C++標準庫中的一個函數(shù),用于創(chuàng)建一個新的線程。這個函數(shù)的原型如下:

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

參數(shù)解釋:

  • arg:傳遞給線程函數(shù)的參數(shù)。
  • stackSize:線程的堆棧大小,以字節(jié)為單位。如果為0,則使用默認堆棧大小。
  • threadfunc:線程函數(shù),該函數(shù)應(yīng)該返回一個DWORD值,并接受一個void*參數(shù)。
  • arg2:傳遞給線程函數(shù)的另一個參數(shù)。
  • creationFlags:創(chuàng)建標志,用于控制線程的創(chuàng)建方式。例如,CREATE_SUSPENDED表示創(chuàng)建一個掛起的線程,CREATE_NO_WINDOW表示創(chuàng)建的線程不擁有窗口句柄。
  • threadId:指向一個新線程的ID的指針。如果此參數(shù)為NULL,則不返回線程ID。

下面是一個簡單的示例,展示如何使用_beginthreadex創(chuàng)建一個新線程:

#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的線程函數(shù),它只是簡單地輸出一條消息。然后,在main函數(shù)中,我們使用_beginthreadex創(chuàng)建一個新線程,并將其掛起。接著,我們恢復(fù)線程的執(zhí)行,并等待它完成(這一步是可選的)。

0