多執行緒簡單例項 beginthreadx實現

2021-08-09 15:51:18 字數 1851 閱讀 2727

使用_beginthreadex()函式,需使用標頭檔案,且進行編譯環境的設定(詳見上篇文章)。

執行緒的建立和終止

c++**:

#include

#include

#include

using

namespace

std;

static

unsigned _stdcall thread1(void *param);

static

unsigned _stdcall thread2(void *param);

int main()

static

unsigned _stdcall thread1(void *param)

static

unsigned _stdcall thread2(void *param)

**詳解

與createthread()相同的部分不再贅述

_beginthreadex(

void *secattr,

unsigned stacksize,

unsigned (__stdcall *threadfunc)(void *),

void *param,

unsigned flags,

unsigned *threadid);

_beginthreadex()的引數類似於createthread()的引數,且與createthread()指定的引數有相同的含義。

函式說明:

1. 第乙個引數secattr是描述執行緒核心物件安全屬性的指標,設定為null,就會使用預設的安全描述符。

2. 第二個引數stacksize表示執行緒棧空間大小。如果為0(1mb),那麼這個執行緒堆疊的大小與建立它的執行緒相同。

3. threadfunc表示新執行緒所執行的執行緒函式位址,多個執行緒可以使用同乙個函式位址,執行緒的執行一直持續到執行緒函式返回。 這個函式的位址在下面的函式中指定。每個執行緒函式都必須具有這樣的原型。執行緒函式的位址(也就是執行緒的入口點)在thread中指定。對於_beginthreadex(),執行緒函式的原型如下:

static unsigned_stdcall thread(void *param)

這個原型在功能上等價於createthread()的執行緒函式的原型,但是它使用了不同的型別名稱。

stdcall的呼叫約定意味著:

1)引數從右向左壓入堆疊;

2)函式自身修改堆疊;

3)函式名自動加前導的下劃線,後面緊跟乙個@符號,其後緊跟著引數的尺寸。。

4.第四個引數param是傳給執行緒函式的引數。

5.第五個引數flags標誌了執行緒的執行狀態,為0表示執行緒建立之後立即就可以進行排程,如果為create_suspended,執行緒則以掛起狀態建立並等待執行,這樣它就無法排程,直到呼叫resumethread()。

6.第六個引數threadid將以的長整型返回執行緒的id號,傳入null表示不需要返回該執行緒id號。

bool  getexitcodethread (

handle hthread,

lpdword lpexitcode

);

hthread long,想獲取退出**的乙個執行緒的控制代碼

lpexitcode long,用於裝載執行緒退出**的乙個長整數變數。如執行緒尚未中斷,則設為常數still_active。

Python簡單多執行緒例項

剛剛學習了python的多執行緒,為了測試多執行緒對處理資料的影響,自己寫了乙個簡單的例項實踐一下多執行緒 coding utf 8 python多執行緒例項 import threading import datetime import time defhandleurllista 執行緒a 如果...

串列埠通訊 多執行緒簡單例項

rs 232串列埠 include reg52.h typedef unsigned char uint8 typedef unsigned int uint16 sbit s2 p2 1 sbit en p2 5 uint8 arg uint8 counter 0 void init void 微...

C 多執行緒程式設計簡單例項

using system using system.collections using system.collections.generic using system.threading 在開發中經常會遇到執行緒的例子,如果某個後台操作比較費時間,我們就可以啟動乙個執行緒去執行那個費時的操作,同時程...