VS C 建立執行緒

2021-08-21 14:23:07 字數 2952 閱讀 3199

建立執行緒方法一

handle winapi createthread(

lpsecurity_attributes lpthreadattributes, // 執行緒安全屬性

size_t dwstacksize, // 執行緒堆疊大小

lpthread_start_routine lpstartaddress, // 執行緒函式位址

lpvoid lpparameter, // 執行緒函式引數

dword dwcreationflags, // 指定執行緒是否立即啟動

lpdword lpthreadid // 儲存執行緒id號

);

執行緒核心物件就是乙個包含了執行緒狀態資訊的資料結構。每次對createthread 的成功呼叫,系統都會在內部為其分配乙個核心物件。

執行緒上下文反應了執行緒上次執行的暫存器狀態,來保證執行緒之間切換(即還原現場)。

計數器,呼叫一次openthread(createthread ),計數器加1,closethread(closehandle)計數器減一。當計數器值為0時,沒有執行緒使用該核心物件,系統收回記憶體。計數器的初始值是2(主線程是1,建立的執行緒是2)。

建立執行緒方法二、c++底部的,並不是windows標準api,建立執行緒函式,該函底層呼叫createthread。

#include uintptr_t _beginthreadex( 

void *security, // 執行緒安全屬性

unsigned stack_size,  // 執行緒堆疊大小

unsigned ( *start_address )( void * ),  //執行緒函式位址

void *arglist,  //傳遞給執行緒函式的引數

unsigned initflag, // 指定執行緒是否立即啟動

unsigned *thrdaddr  // 儲存執行緒id號

);

安全屬性

typedef struct _security_attributes  security_attributes,  

*psecurity_attributes,

*lpsecurity_attributes;

執行緒終止

執行緒函式退出。

執行緒使用的堆疊被釋放。

dwexitcode設定為執行緒函式的返回值。

遞減核心中的code值,讓核心的引用計數減一。

// 結束執行緒呼叫,終止自己

void winapi exitthread(

__in dword dwexitcode // 執行緒結束時的退出碼

);

// 由當前執行緒終止其他執行緒

bool winapi terminatethread(

__in_out handle hthread, // 終止的執行緒控制代碼

__in dword dwexitcode // 退出碼

);

// 程序退出

void winapi exitprocess(

__in uint uexitcode // 退出碼

);

void _endthreadex( 

unsigned retval     // 退出碼

);

例項:

#include #include #include dword winapi threadprofunc(lpvoid lpparam);

int main(int argc, char **argv)

closehandle(hthread); //關閉執行緒控制代碼,核心引用計數減一

system("pause");

return 0;}

dword winapi threadprofunc(lpvoid lpparam)

return 0;

}

執行結果:

nihao

hello

hello

nihao

hello

nihao

nihao

hello

請按任意鍵繼續. . .

#include #include #include #include unsigned int winapi threadprofunc(void *pparam);

int main(int argc, char **argv)

closehandle(hthread); //關閉執行緒控制代碼

system("pause");

return 0;}

unsigned int winapi threadprofunc(void *pparam)

return 0;

}

執行結果:

nihao

hello

hello

nihao

hello

nihao

nihao

hello

請按任意鍵繼續. . .

VS C 執行緒篇之執行緒同步

執行緒同步解決 不同執行緒函式的執行順序,進行執行緒協調。api dword winapi waitforsingleobject handle hhandle,物件控制代碼 thread event job mutex process semaphore waitable timer memory...

VS C 執行緒篇之原子同步

long interlockeddecrement long volatile addend 原子遞減變數的指標 返回值 變數遞減後的值long interlockedincrement long volatile addend 原子遞增變數的指標 返回值 變數遞增後的值long interlock...

VS C 執行緒篇之三設定優先順序

設定執行緒優先順序 bool winapi setthreadpriority in handle hthread,in int npriority 引數npriority的值 thread mode background begin 0x00010000 thread mode backgroun...