日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CreateThread创建线程函数详细讲解

發布時間:2025/5/22 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CreateThread创建线程函数详细讲解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

CreateThread
CreateThread函數創建一個要在調用進程的地址空間中執行的線程。(MSDN講解如下)

處理CreateThread ( LPSECURITY_ATTRIBUTES lpThreadAttributes, //指向安全屬性的指針 dwStackSize, //初始線程堆棧大小 說明:LPTHREAD_START_ROUTINE lpStartAddress, //指向線程函數的指針。- LPVOID lpParameter, //新線程的參數 DWORD dwCreationFlags, // create flags 接收線程ID的指針 );

實例: m_hSendThread = CreateThread(NULL,0,SendThread,this,0,&m_dwSendThreadID);
倒數第二個參數為0表示線程創建后立即運行
最后一個參數不為空,表示運行后有返回值

參數
lpThreadAttributes
指向SECURITY_ATTRIBUTES結構的指針,該結構決定子進程是否可以繼承返回的句柄。如果lpThreadAttributes為空,則不能繼承句柄。
結構的lpSecurityDescriptor成員為新線程指定一個安全描述符。如果lpThreadAttributes為空,線程將獲得一個默認的安全描述符。

dwStackSize
指定堆棧的初始提交大小,以字節為單位。系統將這個值舍入到最近的頁面。如果此值為零,或者小于默認的提交大小,則默認情況下使用與調用線程相同的大小。有關更多信息,請參見線程堆棧大小。
lpStartAddress
指向由線程執行的類型為lpthread_start_例程的應用程序定義的函數的指針,并表示線程的起始地址。有關thread函數的更多信息,請參見ThreadProc。
lpParameter
指定傳遞給線程的單個32位參數值。
dwCreationFlags
指定控制線程創建的附加標志。如果指定了CREATE_SUSPENDED標志,則線程將以掛起狀態創建,并且在調用ResumeThread函數之前不會運行。如果該值為零,則線程在創建后立即運行。此時,不支持其他值。
lpThreadId
指向接收線程標識符的32位變量的指針。
如果該參數為空,則不返回線程標識符。

Windows 95和Windows 98:此參數可能不為空。

返回值
如果函數成功,則返回新線程的句柄。

如果函數失敗,返回值為NULL。要獲取擴展的錯誤信息,請調用GetLastError。

只有在32位程序的上下文中調用CreateThread時才會成功。當16位程序調用一個32位DLL時,該DLL不能創建額外的線程。

講話
使用THREAD_ALL_ACCESS創建新線程句柄。如果沒有提供安全描述符,則可以在需要線程對象句柄的任何函數中使用該句柄。當提供安全描述符時,將在授予訪問權之前對句柄的所有后續使用執行訪問檢查。如果訪問檢查拒絕訪問,請求進程就不能使用句柄來訪問線程。

線程執行從lpStartAddress參數指定的函數開始。如果此函數返回,則使用DWORD返回值終止對ExitThread函數的隱式調用中的線程。使用GetExitCodeThread函數獲取線程的返回值。

即使lpStartAddress指向數據、代碼或不可訪問,CreateThread函數也可能成功。如果線程運行時起始地址無效,則發生異常,線程終止。由于無效的開始地址而導致的線程終止將作為線程進程的錯誤退出處理。這種行為類似于CreateProcess的異步本質,即使它引用無效或缺少動態鏈接庫(dll),也會創建進程。

線程的優先級是THREAD_PRIORITY_NORMAL。使用GetThreadPriority和SetThreadPriority函數來獲取和設置線程的優先級值。

當一個線程終止時,線程對象達到一個有信號狀態,滿足任何正在等待該對象的線程。

線程對象一直保留在系統中,直到線程終止,并且通過調用CloseHandle關閉了對它的所有句柄。

ExitProcess、ExitThread、CreateThread、CreateRemoteThread函數和正在啟動的進程(作為CreateProcess調用的結果)在一個進程內彼此序列化。在地址空間中一次只能發生一個事件。這意味著以下限制仍然有效:

在進程啟動和DLL初始化過程中,可以創建新線程,但是在進程完成DLL初始化之前,它們不會開始執行。
一個進程中一次只能有一個線程處于DLL初始化或分離例程中。
ExitProcess直到沒有線程在其DLL初始化或分離例程時才返回。
使用C運行庫函數的線程應該使用beginthread和endt

總結

以上是生活随笔為你收集整理的CreateThread创建线程函数详细讲解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。