锘??xml version="1.0" encoding="utf-8" standalone="yes"?> CEvent(BOOL bInitiallyOwn=FALSE, 絎簩涓弬鏁皃nid鏄疦OTIFYICONDATA緇撴瀯鐨勫湴鍧錛屽叾鍐呭瑙哾wMessage鐨勫艱屽畾銆傝繖涓粨鏋勫湪SHELLAPI.H鏂囦歡涓畾涔夊涓嬶細
1) 浣跨敤CCriticalSection灝嶈薄瑕佸寘鍚牠鏂囦歡afxmt.h
2) 瀹氱京鍏ㄥ眬CCriticalSection灝嶈薄銆?br> 3) 鍦ㄦ瘡鍊嬬窔紼嬩腑瑕佽í鍟忕殑鐩g晫鍗灝嶈薄鏅傦紝瑾跨敤CCriticalSection灝嶈薄鐨凩ock()鏂規硶錛岀暥涓嶉渶瑕佹檪錛岃鐢║nLock().
UINT ThreadFuction4(LPVOID pParam)

{
Ccall_dll2Dlg *dlg=(Ccall_dll2Dlg*)pParam;
while(1)
{
Critical.Lock();
CTime t=CTime::GetCurrentTime();
string info=t.Format("%H:%M:%S");
dlg->m_list.push_back(info);
dlg->RefreashListBox2();
Critical.Unlock();
Sleep(1500);
}
return 0;
}
UINT ThreadFuction5(LPVOID pParam)

{
Ccall_dll2Dlg *dlg=(Ccall_dll2Dlg*)pParam;
while(1)
{
Critical.Lock();
dlg->m_list.pop_front();
dlg->RefreashListBox2();
Critical.Unlock();
Sleep(2000);
}
return 0;
}
2.CEvent 浜嬩歡
鍒嗙偤浜哄伐浜嬩歡鍜岃嚜鍕曚簨浠?
BOOL bManualReset=FALSE,
LPCTSTR lpszName=NULL,
LPSECURITY_ATTRIBUTES lpsaAttribute=NULL);
//浜嬩歡鐢ㄦ硶
CEvent event;
UINT ThreadEvent(LPVOID pParam)

{
Ccall_dll2Dlg *dlg=(Ccall_dll2Dlg*)pParam;
for(int i=0;i<10;i++)
{
CTime t=CTime::GetCurrentTime();
string info=t.Format("%H:%M:%S");
dlg->m_list.push_back(info);
dlg->RefreashListBox2();
Sleep(1500);
}
event.SetEvent();//璦疆浜嬩歡
return 0;
}
UINT ThreadEventNext(LPVOID pParam)

{
Ccall_dll2Dlg *dlg=(Ccall_dll2Dlg*)pParam;
::WaitForSingleObject(event.m_hObject,INFINITE);//絳夊緟浜嬩歡鐐篢ure
/**//* 鑷嫊浜嬩歡鏅傦紝鏈冭ō緗甧vent鐐篺lase; */
for(int i=0;i<10;i++)
{
dlg->m_list.pop_front();
dlg->RefreashListBox2();
Sleep(1500);
}
return 0;
}
void Ccall_dll2Dlg::OnBnClickedBtnEvent()

{
//鍏堝暉鍕曠窔紼婽hreadEventNext 絳夊緟event鐐篢rue
AfxBeginThread(ThreadEventNext,this);
AfxBeginThread(ThreadEvent,this);
}
3.CSemaphore欏?br> 鍏佽涓涓垨澶氫釜榪涚▼涓殑鏈夐檺澶氫釜綰跨▼璁塊棶涓涓祫婧愮殑鍚屾瀵硅薄
4.CMutex 浜掓枼
鐩哥暥鏂糃CriticalSection,鍙槸CMutex鍙互鍦ㄤ笉鍚岄茬▼闁撹í鍟?闃叉紼嬪簭閬嬭澶氬嬪渚嬶紝鍙互浣跨敤璀斿皪璞°?br>
]]>
1.Shell_NotifyIcon鍑芥暟
BOOL Shell_NotifyIcon(
DWORD dwMessage,
PNOTIFYICONDATA pnid
);
絎竴涓弬鏁癲wMessage綾誨瀷涓篋WORD錛岃〃紺鴻榪涜鐨勫姩浣滐紝瀹冨彲浠ユ槸涓嬮潰鐨勫間箣涓錛?/p>
NIM_ADD錛? 娣誨姞涓涓浘鏍囧埌浠誨姟鏍忋?
NIM_MODIFY錛? 淇敼鐘舵佹爮鍖哄煙鐨勫浘鏍囥?
NIM_DELETE錛? 鍒犻櫎鐘舵佹爮鍖哄煙鐨勫浘鏍囥?
NIM_SETFOCUS錛? 灝嗙劍鐐硅繑鍥炲埌浠誨姟鏍忛氱煡鍖哄煙銆傚綋瀹屾垚鐢ㄦ埛鐣岄潰鎿嶄綔鏃訛紝浠誨姟鏍忓浘鏍囧繀欏葷敤姝ゆ秷鎭備緥濡傦紝濡傛灉浠誨姟鏍忓浘鏍囨
鏄劇ず涓婁笅鏂囪彍鍗曪紝浣嗙敤鎴鋒寜涓?ESCAPE"閿彇娑堟搷浣滐紝榪欐椂灝卞繀欏葷敤姝ゆ秷鎭皢鐒︾偣榪斿洖鍒頒換鍔℃爮閫氱煡鍖哄煙銆?
NIM_SETVERSION錛氭寚紺轟換鍔℃爮鎸夌収鐩稿簲鐨勫姩鎬佸簱鐗堟湰宸ヤ綔銆?
2.NOTIFYICONDATA緇撴瀯
typedef struct _NOTIFYICONDATA {
DWORD cbSize; // 緇撴瀯澶у皬錛坰izeof struct錛夛紝蹇呴』璁劇疆
HWND hWnd; // 鍙戦侀氱煡娑堟伅鐨勭獥鍙e彞鏌?br> UINT uID; // 鍥炬爣ID ( 鐢卞洖璋冨嚱鏁扮殑WPARAM 鎸囧畾)
UINT uFlags;
UINT uCallbackMessage; // 娑堟伅琚彂閫佸埌姝ょ獥鍙h繃紼?br> HICON hIcon; // 鍥炬爣鍙ユ焺
CHAR szTip[64]; // 鎻愮ず鏂囨湰
} NOTIFYICONDATA;
uFlags鐨勫鹼細
#define NIF_MESSAGE 0x1 // 琛ㄧずuCallbackMessage 鏈夋晥
#define NIF_ICON 0x2 // 琛ㄧずhIcon 鏈夋晥
#define NIF_TIP 0x4 // 琛ㄧずszTip 鏈夋晥
浜?寮鍙戞楠?br> 1.瀹氫箟鎵樼洏緇撴瀯
鍦ㄧ被閲屾坊鍔犳垚鍛楴OTIFYICONDATA nd;
緇檔d璧嬪?
nd.cbSize=sizeof(NOTIFYICONDATA);
nd.hWnd=this->m_hWnd;
nd.hIcon=this->m_hIcon;
nd.uID=IDR_MAINFRAME;
nd.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP;
nd.uCallbackMessage=WM_NOTIFYICON;
strcpy(nd.szTip,"my notify icon");
Shell_NOtifyIcon(NIM_ADD,&nd);
3.鍔犲叆鎵樼洏娑堟伅鍝嶅簲鍑芥暟
CPP:
LONG CbackdropDlg::OnNotifyIcon(WPARAM wParam, LPARAM lParam)
{...}
澶存枃浠剁殑DECLARE_MESSAGE_MAP()涔嬪墠娣誨姞:
afx_msg LONG OnNotifyIcon(WPARAM,LPARAM);
4.鍦ㄩ鍑轟箣鍓嶅垹闄ゆ墭鐩樺浘鏍?br> 娣誨姞OnDestory浜嬩歡:
:Shell_NotifyIcon(NIM_DELETE,&nd);
]]>