程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 創建一個簡單的線程

創建一個簡單的線程

編輯:關於C++

HANDLE CreateThread(

_In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes,

//SECURITY_ATTRIBUTES結構指定了這個線程的安全屬性,如果填NULL則就以默認的安全描述子創建,並且返回的句柄不會被繼承。

_In_SIZE_T dwStackSize,

//線程的堆棧大小(單位是字節),如果為0則默認和主線程一樣大。堆棧再進程的內存空間內自動分配並在進程結束時釋放。如有必要堆棧大小可以增加。

//CreateThread在試圖分配大小為dwAtackSize字節數的內存,並在可用內存不足時返回失敗消息。

_In_LPTHREAD_START_ROUTINE lpStartAddress,

//指向線程所需要執行的應用程序提供的函數,同時這也代表線程開始的地址。函數接受一個32位的參數並返回一個32位值

_In_opt_ __drv_aliasesMem LPVOID lpParameter,

//指定一個傳遞給線程的32位參數值

_In_DWORD dwCreationFlags,

//指定一個附加標志來控制線程的創建。如果CREATE_SUSPENDED標志被定義,線程就以掛起狀態創建,即直到ResumeThread()函數被調用之前都不執行

//如果該值為0,線程在創建後立即開始執行

_Out_opt_ LPDWORD lpThreadId

//指向一個保存線程的ID,32位變量

)

如果執行成功,其返回值是指向下一個新線程的句柄。如果失敗,將返回NULL。

當執行完一個線程後,應該關閉該線程的句柄。CloseHandle(),該函數使用CreateThread()返回點句柄,並將對應內核對象的引用計數器加減1。

這並不是強制關閉一個線程,而是告訴系統改線程處於結束時運行狀態。

BOOL CloseHandle( _In_ HANDLE hObject )成功返回true,否者false

測試代碼1當線程循環的次數小於主線程次數時

#include 
#include 
using namespace std;
 

DWORD WINAPI Print_Thread(LPVOID data)
{
cout<<"開始線程\n";
    for(int index=0;index<25; index++)//循環25次
    {
       cout<<"Thread_"<<(int)data<<"_"<
#include 
using namespace std
 
DWORD WINAPI Print_Thread(LPVOID data)
{
cout<<"開始線程\n";
    for(int index=0; index<50;index++)//循環50次
    {
       cout<<"Thread_"<<(int)data<<"_"<

只看看代碼1可能沒有什麼特別的發現,所以我寫了代碼2與其進行對比。細心的讀者會發現我只是改了主線程和子線程for循環的次數。

對比兩個代碼你會發現,當主線程結束時,子線程還在繼續,由於我加了system("pause");所以第一個主線程的for循環結束後,程序沒有直接退出,然而我們才能看到子線程還在繼續跑直到結束才停止。如果你將system("pause");你會發現,當主線程執行完後程序直接退出,不會等待子線程結束。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved