﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-飛天-随笔分类-VC</title><link>http://www.cppblog.com/cjz/category/5019.html</link><description>......</description><language>zh-cn</language><lastBuildDate>Mon, 26 May 2008 17:49:05 GMT</lastBuildDate><pubDate>Mon, 26 May 2008 17:49:05 GMT</pubDate><ttl>60</ttl><item><title>多線程編程-線程同步</title><link>http://www.cppblog.com/cjz/archive/2007/10/27/35304.html</link><dc:creator>飛天</dc:creator><author>飛天</author><pubDate>Sat, 27 Oct 2007 06:18:00 GMT</pubDate><guid>http://www.cppblog.com/cjz/archive/2007/10/27/35304.html</guid><wfw:comment>http://www.cppblog.com/cjz/comments/35304.html</wfw:comment><comments>http://www.cppblog.com/cjz/archive/2007/10/27/35304.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cjz/comments/commentRss/35304.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cjz/services/trackbacks/35304.html</trackback:ping><description><![CDATA[<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在多線程編程中，每個線程間需要協同工作，MFC提供了多種數據同步對象。<br>&nbsp;&nbsp;&nbsp;&nbsp; 1.CCriticalSection&nbsp; 監界區<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1) 使用CCriticalSection對象要包含頭文件<span style="COLOR: red">afxmt.h<br></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2) 定義全局CCriticalSection對象。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3) 在每個線程中要訪問的監界區對象時，調用CCriticalSection對象的Lock()方法，當不需要時，調用UnLock().&nbsp;<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">UINT&nbsp;ThreadFuction4(LPVOID&nbsp;pParam)<br><img id=Codehighlighter1_35_293_Open_Image onclick="this.style.display='none'; Codehighlighter1_35_293_Open_Text.style.display='none'; Codehighlighter1_35_293_Closed_Image.style.display='inline'; Codehighlighter1_35_293_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_35_293_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_35_293_Closed_Text.style.display='none'; Codehighlighter1_35_293_Open_Image.style.display='inline'; Codehighlighter1_35_293_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_35_293_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_35_293_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Ccall_dll2Dlg&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">dlg</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(Ccall_dll2Dlg</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)pParam;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_92_280_Open_Image onclick="this.style.display='none'; Codehighlighter1_92_280_Open_Text.style.display='none'; Codehighlighter1_92_280_Closed_Image.style.display='inline'; Codehighlighter1_92_280_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_92_280_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_92_280_Closed_Text.style.display='none'; Codehighlighter1_92_280_Open_Image.style.display='inline'; Codehighlighter1_92_280_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_92_280_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_92_280_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Critical.Lock();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CTime&nbsp;t</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">CTime::GetCurrentTime();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;info</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">t.Format(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%H:%M:%S</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dlg</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">m_list.push_back(info);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dlg</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">RefreashListBox2();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Critical.Unlock();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sleep(</span><span style="COLOR: #000000">1500</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>UINT&nbsp;ThreadFuction5(LPVOID&nbsp;pParam)<br><img id=Codehighlighter1_330_512_Open_Image onclick="this.style.display='none'; Codehighlighter1_330_512_Open_Text.style.display='none'; Codehighlighter1_330_512_Closed_Image.style.display='inline'; Codehighlighter1_330_512_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_330_512_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_330_512_Closed_Text.style.display='none'; Codehighlighter1_330_512_Open_Image.style.display='inline'; Codehighlighter1_330_512_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_330_512_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_330_512_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Ccall_dll2Dlg&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">dlg</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(Ccall_dll2Dlg</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)pParam;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_387_499_Open_Image onclick="this.style.display='none'; Codehighlighter1_387_499_Open_Text.style.display='none'; Codehighlighter1_387_499_Closed_Image.style.display='inline'; Codehighlighter1_387_499_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_387_499_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_387_499_Closed_Text.style.display='none'; Codehighlighter1_387_499_Open_Image.style.display='inline'; Codehighlighter1_387_499_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_387_499_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_387_499_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Critical.Lock();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dlg</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">m_list.pop_front();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dlg</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">RefreashListBox2();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Critical.Unlock();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sleep(</span><span style="COLOR: #000000">2000</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<p><br>&nbsp;&nbsp;&nbsp;&nbsp; 2.CEvent 事件<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 分為人工事件和自動事件:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CEvent(BOOL bInitiallyOwn=FALSE,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BOOL bManualReset=FALSE,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LPCTSTR lpszName=NULL,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LPSECURITY_ATTRIBUTES lpsaAttribute=NULL);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<li>bInitiallyOwn:指定事件对象初始化状态，TRUE为有信号，FALSE为无信号；
<li>bManualReset：指定要创建的事件是属于人工事件还是自动事件。TRUE为人工事件，FALSE为自动事件； </li>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #008000">//</span><span style="COLOR: #008000">事件用法</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">CEvent&nbsp;</span><span style="COLOR: #0000ff">event</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>UINT&nbsp;ThreadEvent(LPVOID&nbsp;pParam)<br><img id=Codehighlighter1_53_311_Open_Image onclick="this.style.display='none'; Codehighlighter1_53_311_Open_Text.style.display='none'; Codehighlighter1_53_311_Closed_Image.style.display='inline'; Codehighlighter1_53_311_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_53_311_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_53_311_Closed_Text.style.display='none'; Codehighlighter1_53_311_Open_Image.style.display='inline'; Codehighlighter1_53_311_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_53_311_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_53_311_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Ccall_dll2Dlg&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">dlg</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(Ccall_dll2Dlg</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)pParam;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_126_273_Open_Image onclick="this.style.display='none'; Codehighlighter1_126_273_Open_Text.style.display='none'; Codehighlighter1_126_273_Closed_Image.style.display='inline'; Codehighlighter1_126_273_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_126_273_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_126_273_Closed_Text.style.display='none'; Codehighlighter1_126_273_Open_Image.style.display='inline'; Codehighlighter1_126_273_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_126_273_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_126_273_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CTime&nbsp;t</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">CTime::GetCurrentTime();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;info</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">t.Format(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%H:%M:%S</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dlg</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">m_list.push_back(info);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dlg</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">RefreashListBox2();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sleep(</span><span style="COLOR: #000000">1500</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">event</span><span style="COLOR: #000000">.SetEvent();</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">設置事件</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>UINT&nbsp;ThreadEventNext(LPVOID&nbsp;pParam)<br><img id=Codehighlighter1_350_595_Open_Image onclick="this.style.display='none'; Codehighlighter1_350_595_Open_Text.style.display='none'; Codehighlighter1_350_595_Closed_Image.style.display='inline'; Codehighlighter1_350_595_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_350_595_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_350_595_Closed_Text.style.display='none'; Codehighlighter1_350_595_Open_Image.style.display='inline'; Codehighlighter1_350_595_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_350_595_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_350_595_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Ccall_dll2Dlg&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">dlg</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(Ccall_dll2Dlg</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)pParam;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;::WaitForSingleObject(</span><span style="COLOR: #0000ff">event</span><span style="COLOR: #000000">.m_hObject,INFINITE);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">等待事件為Ture</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_458_484_Open_Image onclick="this.style.display='none'; Codehighlighter1_458_484_Open_Text.style.display='none'; Codehighlighter1_458_484_Closed_Image.style.display='inline'; Codehighlighter1_458_484_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_458_484_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_458_484_Closed_Text.style.display='none'; Codehighlighter1_458_484_Open_Image.style.display='inline'; Codehighlighter1_458_484_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_458_484_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_458_484_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">&nbsp;自動事件時，會設置event為flase;&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_510_582_Open_Image onclick="this.style.display='none'; Codehighlighter1_510_582_Open_Text.style.display='none'; Codehighlighter1_510_582_Closed_Image.style.display='inline'; Codehighlighter1_510_582_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_510_582_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_510_582_Closed_Text.style.display='none'; Codehighlighter1_510_582_Open_Image.style.display='inline'; Codehighlighter1_510_582_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_510_582_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_510_582_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dlg</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">m_list.pop_front();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dlg</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">RefreashListBox2();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sleep(</span><span style="COLOR: #000000">1500</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Ccall_dll2Dlg::OnBnClickedBtnEvent()<br><img id=Codehighlighter1_639_752_Open_Image onclick="this.style.display='none'; Codehighlighter1_639_752_Open_Text.style.display='none'; Codehighlighter1_639_752_Closed_Image.style.display='inline'; Codehighlighter1_639_752_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_639_752_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_639_752_Closed_Text.style.display='none'; Codehighlighter1_639_752_Open_Image.style.display='inline'; Codehighlighter1_639_752_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_639_752_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_639_752_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">先啟動線程ThreadEventNext&nbsp;等待event為True</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;AfxBeginThread(ThreadEventNext,</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;AfxBeginThread(ThreadEvent,</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.CSemaphore類<br>&nbsp;&nbsp;&nbsp;&nbsp; 允许一个或多个进程中的有限多个线程访问一个资源的同步对象<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.CMutex 互斥<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 相當於CCriticalSection,只是CMutex可以在不同進程間訪問.防止程序運行多個實例，可以使用譔對象。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<img src ="http://www.cppblog.com/cjz/aggbug/35304.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cjz/" target="_blank">飛天</a> 2007-10-27 14:18 <a href="http://www.cppblog.com/cjz/archive/2007/10/27/35304.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>托盘程序实例</title><link>http://www.cppblog.com/cjz/archive/2007/08/28/31060.html</link><dc:creator>飛天</dc:creator><author>飛天</author><pubDate>Tue, 28 Aug 2007 14:30:00 GMT</pubDate><guid>http://www.cppblog.com/cjz/archive/2007/08/28/31060.html</guid><wfw:comment>http://www.cppblog.com/cjz/comments/31060.html</wfw:comment><comments>http://www.cppblog.com/cjz/archive/2007/08/28/31060.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cjz/comments/commentRss/31060.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cjz/services/trackbacks/31060.html</trackback:ping><description><![CDATA[<p dir=ltr style="MARGIN-RIGHT: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一.托盘相关内容<br>&nbsp;&nbsp;&nbsp;&nbsp; 1.Shell_NotifyIcon函数<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BOOL Shell_NotifyIcon(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWORD dwMessage,&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PNOTIFYICONDATA pnid<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;第一个参数dwMessage类型为DWORD，表示要进行的动作，它可以是下面的值之一：</p>
<blockquote dir=ltr style="MARGIN-RIGHT: 0px">
<blockquote dir=ltr style="MARGIN-RIGHT: 0px">
<pre>NIM_ADD：       添加一个图标到任务栏。
NIM_MODIFY：    修改状态栏区域的图标。
NIM_DELETE：    删除状态栏区域的图标。
NIM_SETFOCUS：  将焦点返回到任务栏通知区域。当完成用户界面操作时，任务栏图标必须用此消息。例如，如果任务栏图标正
显示上下文菜单，但用户按下"ESCAPE"键取消操作，这时就必须用此消息将焦点返回到任务栏通知区域。
NIM_SETVERSION：指示任务栏按照相应的动态库版本工作。      </pre>
</blockquote></blockquote>
<p dir=ltr style="MARGIN-RIGHT: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;第二个参数pnid是NOTIFYICONDATA结构的地址，其内容视dwMessage的值而定。这个结构在SHELLAPI.H文件中定义如下：&nbsp;&nbsp;&nbsp;<br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.NOTIFYICONDATA结构<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typedef struct _NOTIFYICONDATA {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWORD cbSize;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 结构大小（sizeof struct），必须设置<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HWND hWnd;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 发送通知消息的窗口句柄<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UINT uID;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; 图标ID ( 由回调函数的WPARAM 指定)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UINT uFlags;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UINT uCallbackMessage;&nbsp;&nbsp;&nbsp; // 消息被发送到此窗口过程<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HICON hIcon;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 图标句柄<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CHAR szTip[64];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 提示文本<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} NOTIFYICONDATA;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uFlags的值：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#define NIF_MESSAGE 0x1&nbsp;&nbsp; // 表示uCallbackMessage 有效<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#define NIF_ICON&nbsp;&nbsp;&nbsp; 0x2&nbsp;&nbsp; // 表示hIcon 有效<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#define NIF_TIP&nbsp;&nbsp;&nbsp;&nbsp; 0x4&nbsp;&nbsp; // 表示szTip 有效&nbsp;&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;二.开发步骤<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.定义托盘结构<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在类里添加成员NOTIFYICONDATA nd;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 给nd赋值:<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; HEIGHT: 107px; BACKGROUND-COLOR: #eeeeee">
<blockquote dir=ltr style="MARGIN-RIGHT: 0px">
<p><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;nd.cbSize</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(NOTIFYICONDATA);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;nd.hWnd</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">m_hWnd;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;nd.hIcon</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">m_hIcon;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;nd.uID</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">IDR_MAINFRAME;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;nd.uFlags</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">NIF_ICON</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">NIF_MESSAGE</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">NIF_TIP;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;nd.uCallbackMessage</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">WM_NOTIFYICON;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;strcpy(nd.szTip,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">my&nbsp;notify&nbsp;icon</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);</span></p>
</blockquote></div>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.添加托盘图标<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Shell_NOtifyIcon(NIM_ADD,&amp;nd);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.加入托盘消息响应函数<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPP:&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LONG CbackdropDlg::OnNotifyIcon(WPARAM wParam, LPARAM lParam)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{...}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;头文件的DECLARE_MESSAGE_MAP()之前添加:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;afx_msg LONG OnNotifyIcon(WPARAM,LPARAM);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4.在退出之前删除托盘图标<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 添加OnDestory事件:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:Shell_NotifyIcon(NIM_DELETE,&amp;nd);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<img src ="http://www.cppblog.com/cjz/aggbug/31060.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cjz/" target="_blank">飛天</a> 2007-08-28 22:30 <a href="http://www.cppblog.com/cjz/archive/2007/08/28/31060.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>