使用win32 api建立執行緒,建立訊號量用於執行緒的同步
建立訊號量
語法如下
handle semophore;
semophore = createsemaphore(lpsemaphoreattributes, linitialcount, lmaximumcount, lpname);
createsemophore函式的原型如下:
handle winapi createsemaphore(
_in_opt_ lpsecurity_attributes lpsemaphoreattributes,//屬性
_in_ long linitialcount,//初始值
_in_ long lmaximumcount,//最大值
_in_opt_ lpctstr lpname//訊號量物件的名字
);
函式返回乙個指向訊號量物件的控制代碼,是乙個handle物件
wait操作和signal操作
使用結構一般是這樣的
while(true)
兩個函式的原型如下:
dword waitforsingleobject(
handle hhandle,//控制代碼,可以指向訊號量或者執行緒
dword dwmilliseconds//等待的毫秒數
);bool releasesemaphore(
handle hsemaphore,//控制代碼,指向訊號量
long lreleasecount,//給訊號量增加值,一般是1
lplong lppreviouscount//儲存訊號量之前的值的變數的指標
);
建立執行緒
handle producer;
//producer 執行緒執行這個函式
//pro_id 執行緒id
producer = createthread(null, 0, producer, null, 0, &pro_id);//建立執行緒
函式原型
handle winapi createthread(
_in_opt_ lpsecurity_attributes lpthreadattributes,//指向執行緒屬性結構體的指標
_in_ size_t dwstacksize,//棧的初始化大小,0表示使用預設的大小
_in_ lpthread_start_routine lpstartaddress,//起始位址,也就是執行緒函式的指標
_in_opt_ lpvoid lpparameter,//執行緒函式引數的指標
_in_ dword dwcreationflags,//控制建立的標誌位,0表示執行緒建立後立即執行,create_suspended表示新建為suspended狀態,直到 resumethread 被呼叫時才執行,stack_size_param_is_a_reservation,由dwstacksize 引數指定初始的保留棧的大小,不指定的話,dwstacksize指定提交的大小
_out_opt_ lpdword lpthreadid//執行緒id的指標
);
生產者消費者執行緒同步**如下
#include#include#define queue_length 10 //緩衝區長度
handle full_sem; //滿訊號量
handle empty_sem; //空訊號量
struct msg
;//訊息結構
msg msgqueue[queue_length]; //緩衝區
int head = 0;//佇列頭
int tail = 0;//佇列尾
dword winapi consumer(lpvoid lpparameter){//消費者執行緒
for (int i = 0;;i++){
waitforsingleobject(full_sem, infinite);//wait操作
//waitforsingleobject(mutex, infinite);//多個消費者需要加互斥訊號量
int val = msgqueue[head].i;
head = (head + 1) % queue_length;
//releasesemaphore(mutex, 1, null);//signal操作
std::cout << "consumer : "<
win32彙編使用win32 api實現字串拷貝
字串拷貝,呼叫win32的lstrcpy函式 拷貝了以後用訊息框顯示一下 386 model flat,stdcall option casemap none include s masm32 include windows.inc include s masm32 include user32.i...
用Win32 API實現序列通訊
2003 7 9 7 56 18 pcvc.wangxi 閱讀次數 30453 串列埠是常用的計算機與外部序列裝置之間的資料傳輸通道,由於序列通訊方便 易行,所以應用廣泛。我們可以利用windows api 提供的通訊函式編寫出高可移植性的 序列通訊程式。在win16中,可以利用open m clo...
win32API實現透明字幕視窗
hwnd hwnd createwindowex ws ex layered,text testwindow text 透明視窗 ws popup ws visible,0,0,20,20,null,hinstance,null setlayeredwindowattributes hwnd,0,0...