建立執行緒方法一
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...