利用createevent函式,建立執行緒互斥執行,是執行緒同步的另一種方式,(鎖機制);
#include #include dword winapi func1proc(lpvoid lpparameter);dword winapi func2proc(lpvoid lpparameter);
int tickets=100;
handle h_hevent;//儲存時間物件的控制代碼,
void main()
dword winapi func1proc(
lpvoid lpparameter // thread data
)if ( lobyte( wsadata.wversion ) != 2 ||
hibyte( wsadata.wversion ) != 2 )
4,在chatdlg裡面新增成員變數m_socket和initsock()函式,初始化socket相關資訊
bool cchat_asydlg::initsocket()
//繫結套接字的資訊
sockaddr_in addrsock;
addrsock.sin_addr.s_un.s_addr=htonl(inaddr_any);
addrsock.sin_family=af_inet;
addrsock.sin_port=htons(6000);
if (socket_error==bind(m_socket,(sockaddr*)&addrsock,sizeof(sockaddr)))
//呼叫wsaselect函式請求乙個基於訊息的網路通知;
if(socket_error==wsaasyncselect(m_socket,m_hwnd,wm_sock,fd_read))//fd_read註冊乙個讀取的事件
return true;
}
5 在initchatdlg(0裡面呼叫initsock()函式;
6新增訊息對映函式和定義訊息;
on_message(wm_sock,onsock)//訊息對映
#d#define wm_sock wm_user+17,新增訊息響應函式,並實現之;
afxafx_msg void onsock(wparam,lparam);//建立標準訊息響應函式
void cchat_asydlg::onsock(wparam wparam,lparam lparam)7 新增「send」按鈕的訊息函式;(將獲得的訊息輸出到對話方塊上)str.format("%s 說:%s",inet_ntoa(addrfrom.sin_addr),wsabuf.buf);
cstring strtemp;
str+="\r\n";
getdlgitemtext(idc_edit_recv,strtemp);
str+=strtemp;
setdlgitemtext(idc_edit_recv,str);
break;
}}
void cchat_asydlg::onbtnsend()
(未完全理解)
1
C 筆記16 多執行緒和同步
同步多執行緒處理模式 什麼是程序 執行緒 建立執行緒var task newtask 宣告執行緒之後並不會馬上執行。task.start 執行執行緒int times 5000 var task1 newtask var task2 newtask task1.start task2.start t...
C 執行緒同步 (學習筆記)
1.利用mutex 互斥物件 2.利用event 事件物件 3.利用臨界區 critical section 效率更高 4.利用semaphore訊號量 filename semaphore test.cpp author jarvischu date 2012 11 22 include incl...
學習筆記 執行緒間同步
執行緒間同步,需要等待。等待對於同步的重要性是不言而喻的。考慮乙個工廠的流水線,假設工序1和工序2沒有關聯,那麼找兩個工人各幹的就可以,這兩個工人都可以不認識對方。現在考慮的重點是工序1和工序2有關聯。那麼兩個工序就需要某種形式的溝通和同步。第一種情況 工序1進行到某個時間點時,需要工序2結束。1 ...