锘??xml version="1.0" encoding="utf-8" standalone="yes"?>国产偷久久久精品专区,欧美激情综合五月色丁香小说 ,欧美一区二区三区电影在线观看http://www.shnenglu.com/bhjjkg/See gullzh-cnMon, 29 Sep 2025 16:35:36 GMTMon, 29 Sep 2025 16:35:36 GMT60瀵繪壘"鍙戝笘姘寸帇" http://www.shnenglu.com/bhjjkg/archive/2009/07/09/89581.htmlWood_KWood_KWed, 08 Jul 2009 19:10:00 GMThttp://www.shnenglu.com/bhjjkg/archive/2009/07/09/89581.htmlhttp://www.shnenglu.com/bhjjkg/comments/89581.htmlhttp://www.shnenglu.com/bhjjkg/archive/2009/07/09/89581.html#Feedback5http://www.shnenglu.com/bhjjkg/comments/commentRss/89581.htmlhttp://www.shnenglu.com/bhjjkg/services/trackbacks/89581.html

涓涓鍧涗腑鍙堜竴澶?#8220;姘寸帇”錛屼粬涓嶄絾鍠滄鍙戝笘錛岃繕浼氬洖澶嶅叾浠朓D鍙戠殑姣忎釜甯栧瓙銆傝“姘寸帇”鍙戝笘鏁扮洰瓚呰繃浜嗘繪暟鐨勪竴鍗娿傚鏋滀綘鍙堜竴涓綋鍓嶈鍧涙墍鏈夊笘瀛愶紙鍖呮嫭鍥炲笘錛夌殑鍒楄〃錛屽叾涓笘瀛愪綔鑰呯殑ID涔熷湪琛ㄤ腑錛屼綘鑳藉揩閫熸壘鍑鴻繖涓紶璇翠腑鐨勬按鐜嬪悧錛?/p>

 

鍒嗘瀽涓庤В娉曪細

銆銆棣栧厛鎯沖埌鐨勬槸涓涓渶鐩存帴鐨勬柟娉曪紝鎴戜滑鍙互闃熸墍鏈塈D榪涜鎺掑簭銆傜劧鍚庡啀鎵弿涓閬嶆帓濂藉簭鐨処D鍒楄〃錛岀粺璁″悇涓狪D鍑虹幇鐨勬鏁般傚鏋滄煇涓狪D鍑虹幇鐨勬鏁拌秴榪囨繪暟鐨勪竴鍗婏紝閭d箞灝辮緭鍑鴻繖涓狪D銆傝繖涓畻娉曠殑鏃墮棿澶嶆潅搴︿負O(N*log2N+N)銆?/p>

 

濡傛灉涓涓狪D鍑虹幇鐨勬鏁拌秴榪囨繪暟N鐨勪竴鍗娿傞偅涔堬紝鏃犺姘寸帇鐨処D鏄粈涔堬紝榪欎釜鏈夊簭鐨処D鍒楄〃涓殑絎琋/2欏癸紙浠?寮濮嬬紪鍙鳳級涓瀹氫細鏄繖涓狪D錛堣鑰呭彲浠ヨ瘯鐫璇佹槑涓涓嬶級銆傜渷鍘婚噸鏂版壂鎻忎竴閬嶅垪琛紝鍙互鑺傜渷涓鐐圭畻娉曡楄垂鐨勬椂闂淬傚鏋滆兘澶熻繀閫熷畾浣嶅埌鍒楄〃鐨勬煇涓欏癸紙姣斿浣跨敤鏁扮粍鏉ュ瓨鍌ㄥ垪琛級錛岄櫎鍘繪帓搴忕殑鏃墮棿澶嶆潅搴︼紝鍚庡鐞嗛渶瑕佺殑鏃墮棿涓篛錛?錛夈?/p>

濡傛灉姣忔鍒犻櫎涓や釜涓嶅悓鐨処D錛堜笉綆℃槸鍚﹀寘鍚?#8220;姘寸帇”鐨処D錛夛紝閭d箞錛屽湪鍓╀笅鐨処D鍒楄〃涓紝“姘寸帇”ID鍑虹幇鐨勬鏁頒粛鐒惰秴榪囨繪暟鐨勪竴鍗娿傜湅鍒拌繖涓鐐逛箣鍚庯紝灝卞彲浠ラ氳繃涓嶆柇閲嶅榪欎釜榪囩▼錛屾妸ID鍒楄〃涓殑ID鎬繪暟闄嶄綆錛堣漿鍖栦負鏇村皬鐨勯棶棰橈級錛屼粠鑰屽緱鍒伴棶棰樼殑絳旀銆傛柊鐨勬濊礬錛岄伩鍏嶄簡鎺掑簭榪欎釜鑰楁椂鐨勬楠わ紝鎬葷殑鏃墮棿澶嶆潅搴﹀彧鏈塐錛圢錛夛紝涓斿彧闇瑕佸父鏁扮殑棰濆鍐呭瓨銆?/p>

Wood_K 2009-07-09 03:10 鍙戣〃璇勮
]]>
鍒濊瘑VC澶氱嚎紼嬬紪紼?/title><link>http://www.shnenglu.com/bhjjkg/archive/2009/07/03/89132.html</link><dc:creator>Wood_K</dc:creator><author>Wood_K</author><pubDate>Thu, 02 Jul 2009 23:56:00 GMT</pubDate><guid>http://www.shnenglu.com/bhjjkg/archive/2009/07/03/89132.html</guid><wfw:comment>http://www.shnenglu.com/bhjjkg/comments/89132.html</wfw:comment><comments>http://www.shnenglu.com/bhjjkg/archive/2009/07/03/89132.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/bhjjkg/comments/commentRss/89132.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/bhjjkg/services/trackbacks/89132.html</trackback:ping><description><![CDATA[<p><br>VC涓綰跨▼浣跨敤姣旇緝騫挎硾鑰屼笖瀹炵敤,鍦ㄧ綉涓婄湅鍒扮殑鏁欑▼.鎰熻鍐欑殑鎸哄ソ. </p> <p>涓銆侀棶棰樼殑鎻愬嚭</p> <p>緙栧啓涓涓楁椂鐨勫崟綰跨▼紼嬪簭錛?/p> <p>銆銆鏂板緩涓涓熀浜庡璇濇鐨勫簲鐢ㄧ▼搴廠ingleThread錛屽湪涓誨璇濇IDD_SINGLETHREAD_DIALOG娣誨姞涓涓寜閽紝ID涓篒DC_SLEEP_SIX_SECOND錛屾爣棰樹負“寤舵椂6縐?#8221;錛屾坊鍔犳寜閽殑鍝嶅簲鍑芥暟錛屼唬鐮佸涓嬶細 </p> <p>void CSingleThreadDlg::OnSleepSixSecond() <br>{<br> Sleep(6000); //寤舵椂6縐?br>}</p> <p>銆銆緙栬瘧騫惰繍琛屽簲鐢ㄧ▼搴忥紝鍗曞嚮“寤舵椂6縐?#8221;鎸夐挳錛屼綘灝變細鍙戠幇鍦ㄨ繖6縐掓湡闂寸▼搴忓氨璞?#8220;姝繪満”涓鏍鳳紝涓嶅湪鍝嶅簲鍏跺畠娑堟伅銆備負浜嗘洿濂藉湴澶勭悊榪欑鑰楁椂鐨勬搷浣滐紝鎴戜滑鏈夊繀瑕佸涔犫斺斿綰跨▼緙栫▼銆?br>浜屻佸綰跨▼姒傝堪</p> <p>銆銆榪涚▼鍜岀嚎紼嬮兘鏄搷浣滅郴緇熺殑姒傚康銆傝繘紼嬫槸搴旂敤紼嬪簭鐨勬墽琛屽疄渚嬶紝姣忎釜榪涚▼鏄敱縐佹湁鐨勮櫄鎷熷湴鍧絀洪棿銆佷唬鐮併佹暟鎹拰鍏跺畠鍚勭緋葷粺璧勬簮緇勬垚錛岃繘紼嬪湪榪愯榪囩▼涓垱寤虹殑璧勬簮闅忕潃榪涚▼鐨勭粓姝㈣岃閿姣侊紝鎵浣跨敤鐨勭郴緇熻祫婧愬湪榪涚▼緇堟鏃惰閲婃斁鎴栧叧闂?br>銆銆綰跨▼鏄繘紼嬪唴閮ㄧ殑涓涓墽琛屽崟鍏冦傜郴緇熷垱寤哄ソ榪涚▼鍚庯紝瀹為檯涓婂氨鍚姩鎵ц浜嗚榪涚▼鐨勪富鎵ц綰跨▼錛屼富鎵ц綰跨▼浠ュ嚱鏁板湴鍧褰㈠紡錛屾瘮濡傝main鎴朩inMain鍑芥暟錛屽皢紼嬪簭鐨勫惎鍔ㄧ偣鎻愪緵緇橶indows緋葷粺銆備富鎵ц綰跨▼緇堟浜嗭紝榪涚▼涔熷氨闅忎箣緇堟銆?br>銆銆姣忎竴涓繘紼嬭嚦灝戞湁涓涓富鎵ц綰跨▼錛屽畠鏃犻渶鐢辯敤鎴峰幓涓誨姩鍒涘緩錛屾槸鐢辯郴緇熻嚜鍔ㄥ垱寤虹殑銆傜敤鎴鋒牴鎹渶瑕佸湪搴旂敤紼嬪簭涓垱寤哄叾瀹冪嚎紼嬶紝澶氫釜綰跨▼騫跺彂鍦拌繍琛屼簬鍚屼竴涓繘紼嬩腑銆備竴涓繘紼嬩腑鐨勬墍鏈夌嚎紼嬮兘鍦ㄨ榪涚▼鐨勮櫄鎷熷湴鍧絀洪棿涓紝鍏卞悓浣跨敤榪欎簺铏氭嫙鍦板潃絀洪棿銆佸叏灞鍙橀噺鍜岀郴緇熻祫婧愶紝鎵浠ョ嚎紼嬮棿鐨勯氳闈炲父鏂逛究錛屽綰跨▼鎶鏈殑搴旂敤涔熻緝涓哄箍娉涖?br>銆銆澶氱嚎紼嬪彲浠ュ疄鐜板茍琛屽鐞嗭紝閬垮厤浜嗘煇欏逛換鍔¢暱鏃墮棿鍗犵敤CPU鏃墮棿銆傝璇存槑鐨勪竴鐐規槸錛岀洰鍓嶅ぇ澶氭暟鐨勮綆楁満閮芥槸鍗曞鐞嗗櫒錛圕PU錛夌殑錛屼負浜嗚繍琛屾墍鏈夎繖浜涚嚎紼嬶紝鎿嶄綔緋葷粺涓烘瘡涓嫭绔嬬嚎紼嬪畨鎺掍竴浜汣PU鏃墮棿錛屾搷浣滅郴緇熶互杞崲鏂瑰紡鍚戠嚎紼嬫彁渚涙椂闂寸墖錛岃繖灝辯粰浜轟竴縐嶅亣璞★紝濂借薄榪欎簺綰跨▼閮藉湪鍚屾椂榪愯銆傜敱姝ゅ彲瑙侊紝濡傛灉涓や釜闈炲父媧昏穬鐨勭嚎紼嬩負浜嗘姠澶哄CPU鐨勬帶鍒舵潈錛屽湪綰跨▼鍒囨崲鏃朵細娑堣楀緢澶氱殑CPU璧勬簮錛屽弽鑰屼細闄嶄綆緋葷粺鐨勬ц兘銆傝繖涓鐐瑰湪澶氱嚎紼嬬紪紼嬫椂搴旇娉ㄦ剰銆?br>銆銆Win32 SDK鍑芥暟鏀寔榪涜澶氱嚎紼嬬殑紼嬪簭璁捐錛屽茍鎻愪緵浜嗘搷浣滅郴緇熷師鐞嗕腑鐨勫悇縐嶅悓姝ャ佷簰鏂ュ拰涓寸晫鍖虹瓑鎿嶄綔銆俈isual C++ 6.0涓紝浣跨敤MFC綾誨簱涔熷疄鐜頒簡澶氱嚎紼嬬殑紼嬪簭璁捐錛屼嬌寰楀綰跨▼緙栫▼鏇村姞鏂逛究銆?/p> <p>涓夈乄in32 API瀵瑰綰跨▼緙栫▼鐨勬敮鎸?/p> <p>銆銆Win32 鎻愪緵浜嗕竴緋誨垪鐨凙PI鍑芥暟鏉ュ畬鎴愮嚎紼嬬殑鍒涘緩銆佹寕璧楓佹仮澶嶃佺粓緇撲互鍙婇氫俊絳夊伐浣溿備笅闈㈠皢閫夊彇鍏朵腑鐨勪竴浜涢噸瑕佸嚱鏁拌繘琛岃鏄庛?</p> <p>1銆丠ANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,<br>                 DWORD dwStackSize,<br>                 LPTHREAD_START_ROUTINE lpStartAddress,<br>                 LPVOID lpParameter,<br>                 DWORD dwCreationFlags,<br>                 LPDWORD lpThreadId);</p> <p>璇ュ嚱鏁板湪鍏惰皟鐢ㄨ繘紼嬬殑榪涚▼絀洪棿閲屽垱寤轟竴涓柊鐨勭嚎紼嬶紝騫惰繑鍥炲凡寤虹嚎紼嬬殑鍙ユ焺錛屽叾涓悇鍙傛暟璇存槑濡備笅錛?br>lpThreadAttributes錛氭寚鍚戜竴涓?SECURITY_ATTRIBUTES 緇撴瀯鐨勬寚閽堬紝璇ョ粨鏋勫喅瀹氫簡綰跨▼鐨勫畨鍏ㄥ睘鎬э紝涓鑸疆涓?NULL錛?<br>dwStackSize錛氭寚瀹氫簡綰跨▼鐨勫爢鏍堟繁搴︼紝涓鑸兘璁劇疆涓?錛?<br>lpStartAddress錛氳〃紺烘柊綰跨▼寮濮嬫墽琛屾椂浠g爜鎵鍦ㄥ嚱鏁扮殑鍦板潃錛屽嵆綰跨▼鐨勮搗濮嬪湴鍧銆備竴鑸儏鍐典負(LPTHREAD_START_ROUTINE)ThreadFunc錛孴hreadFunc 鏄嚎紼嬪嚱鏁板悕錛?<br>lpParameter錛氭寚瀹氫簡綰跨▼鎵ц鏃朵紶閫佺粰綰跨▼鐨?2浣嶅弬鏁幫紝鍗崇嚎紼嬪嚱鏁扮殑鍙傛暟錛?<br>dwCreationFlags錛氭帶鍒剁嚎紼嬪垱寤虹殑闄勫姞鏍囧織錛屽彲浠ュ彇涓ょ鍊箋傚鏋滆鍙傛暟涓?錛岀嚎紼嬪湪琚垱寤哄悗灝變細绔嬪嵆寮濮嬫墽琛岋紱濡傛灉璇ュ弬鏁頒負CREATE_SUSPENDED,鍒欑郴緇熶駭鐢熺嚎紼嬪悗錛岃綰跨▼澶勪簬鎸傝搗鐘舵侊紝騫朵笉椹笂鎵ц錛岀洿鑷沖嚱鏁癛esumeThread琚皟鐢紱 <br>lpThreadId錛氳鍙傛暟榪斿洖鎵鍒涘緩綰跨▼鐨処D錛?<br>濡傛灉鍒涘緩鎴愬姛鍒欒繑鍥炵嚎紼嬬殑鍙ユ焺錛屽惁鍒欒繑鍥濶ULL銆?</p> <p>2銆丏WORD SuspendThread(HANDLE hThread);</p> <p>璇ュ嚱鏁扮敤浜庢寕璧鋒寚瀹氱殑綰跨▼錛屽鏋滃嚱鏁版墽琛屾垚鍔燂紝鍒欑嚎紼嬬殑鎵ц琚粓姝€?3銆丏WORD ResumeThread(HANDLE hThread);</p> <p>璇ュ嚱鏁扮敤浜庣粨鏉熺嚎紼嬬殑鎸傝搗鐘舵侊紝鎵ц綰跨▼銆?4銆乂OID ExitThread(DWORD dwExitCode);</p> <p>璇ュ嚱鏁扮敤浜庣嚎紼嬬粓緇撹嚜韜殑鎵ц錛屼富瑕佸湪綰跨▼鐨勬墽琛屽嚱鏁頒腑琚皟鐢ㄣ傚叾涓弬鏁癲wExitCode鐢ㄦ潵璁劇疆綰跨▼鐨勯鍑虹爜銆?5銆丅OOL TerminateThread(HANDLE hThread,DWORD dwExitCode);</p> <p>銆銆涓鑸儏鍐典笅錛岀嚎紼嬭繍琛岀粨鏉熶箣鍚庯紝綰跨▼鍑芥暟姝e父榪斿洖錛屼絾鏄簲鐢ㄧ▼搴忓彲浠ヨ皟鐢═erminateThread寮鴻緇堟鏌愪竴綰跨▼鐨勬墽琛屻傚悇鍙傛暟鍚箟濡備笅錛?br>hThread錛氬皢琚粓緇撶殑綰跨▼鐨勫彞鏌勶紱 <br>dwExitCode錛氱敤浜庢寚瀹氱嚎紼嬬殑閫鍑虹爜銆?<br>銆銆浣跨敤TerminateThread()緇堟鏌愪釜綰跨▼鐨勬墽琛屾槸涓嶅畨鍏ㄧ殑錛屽彲鑳戒細寮曡搗緋葷粺涓嶇ǔ瀹氾紱铏界劧璇ュ嚱鏁扮珛鍗崇粓姝㈢嚎紼嬬殑鎵ц錛屼絾騫朵笉閲婃斁綰跨▼鎵鍗犵敤鐨勮祫婧愩傚洜姝わ紝涓鑸笉寤鴻浣跨敤璇ュ嚱鏁般?</p> <p>6銆丅OOL PostThreadMessage(DWORD idThread,<br>   UINT Msg,<br>   WPARAM wParam,<br>   LPARAM lParam);</p> <p>璇ュ嚱鏁板皢涓鏉℃秷鎭斁鍏ュ埌鎸囧畾綰跨▼鐨勬秷鎭槦鍒椾腑錛屽茍涓斾笉絳夊埌娑堟伅琚綰跨▼澶勭悊鏃朵究榪斿洖銆?br>idThread錛氬皢鎺ユ敹娑堟伅鐨勭嚎紼嬬殑ID錛?<br>Msg錛氭寚瀹氱敤鏉ュ彂閫佺殑娑堟伅錛?<br>wParam錛氬悓娑堟伅鏈夊叧鐨勫瓧鍙傛暟錛?<br>lParam錛氬悓娑堟伅鏈夊叧鐨勯暱鍙傛暟錛?<br>璋冪敤璇ュ嚱鏁版椂錛屽鏋滃嵆灝嗘帴鏀舵秷鎭殑綰跨▼娌℃湁鍒涘緩娑堟伅寰幆錛屽垯璇ュ嚱鏁版墽琛屽け璐ャ?/p> <p>鍥涖乄in32 API澶氱嚎紼嬬紪紼嬩緥紼?/p> <p>渚嬬▼1 MultiThread1</p> <p>寤虹珛涓涓熀浜庡璇濇鐨勫伐紼婱ultiThread1錛屽湪瀵硅瘽妗咺DD_MULTITHREAD1_DIALOG涓姞鍏ヤ袱涓寜閽拰涓涓紪杈戞錛屼袱涓寜閽殑ID鍒嗗埆鏄疘DC_START錛孖DC_STOP 錛屾爣棰樺垎鍒負“鍚姩”錛?#8220;鍋滄”錛孖DC_STOP鐨勫睘鎬ч変腑Disabled錛涚紪杈戞鐨処D涓篒DC_TIME 錛屽睘鎬ч変腑Read-only錛?br>銆 <br>鍦∕ultiThread1Dlg.h鏂囦歡涓坊鍔犵嚎紼嬪嚱鏁板0鏄庯細 void ThreadFunc();</p> <p>娉ㄦ剰錛岀嚎紼嬪嚱鏁扮殑澹版槑搴斿湪綾籆MultiThread1Dlg鐨勫閮ㄣ?鍦ㄧ被CMultiThread1Dlg鍐呴儴娣誨姞protected鍨嬪彉閲忥細  HANDLE hThread;<br> DWORD ThreadID;</p> <p>鍒嗗埆浠h〃綰跨▼鐨勫彞鏌勫拰ID銆?<br>銆 <br>鍦∕ultiThread1Dlg.cpp鏂囦歡涓坊鍔犲叏灞鍙橀噺m_bRun 錛?volatile BOOL m_bRun;</p> <p>m_bRun 浠h〃綰跨▼鏄惁姝e湪榪愯銆?/p> <p>浣犺鐣欐剰鍒板叏灞鍙橀噺 m_bRun 鏄嬌鐢?volatile 淇グ絎︾殑錛寁olatile 淇グ絎︾殑浣滅敤鏄憡璇夌紪璇戝櫒鏃犻渶瀵硅鍙橀噺浣滀換浣曠殑浼樺寲錛屽嵆鏃犻渶灝嗗畠鏀懼埌涓涓瘎瀛樺櫒涓紝騫朵笖璇ュ煎彲琚閮ㄦ敼鍙樸傚浜庡綰跨▼寮曠敤鐨勫叏灞鍙橀噺鏉ヨ錛寁olatile 鏄竴涓潪甯擱噸瑕佺殑淇グ絎︺?/p> <p>緙栧啓綰跨▼鍑芥暟錛?void ThreadFunc()<br>{<br> CTime time;<br> CString strTime;<br> m_bRun=TRUE;<br> while(m_bRun)<br> {<br>  time=CTime::GetCurrentTime();<br>  strTime=time.Format("%H:%M:%S");<br>  ::SetDlgItemText(AfxGetMainWnd()->m_hWnd,IDC_TIME,strTime);<br>  Sleep(1000);<br> }<br>}</p> <p>璇ョ嚎紼嬪嚱鏁版病鏈夊弬鏁幫紝涔熶笉榪斿洖鍑芥暟鍊箋傚彧瑕乵_bRun涓篢RUE錛岀嚎紼嬩竴鐩磋繍琛屻?/p> <p>鍙屽嚮IDC_START鎸夐挳錛屽畬鎴愯鎸夐挳鐨勬秷鎭嚱鏁幫細 void CMultiThread1Dlg::OnStart() <br>{<br> // TODO: Add your control notification handler code here<br> hThread=CreateThread(NULL,<br>  0,<br>  (LPTHREAD_START_ROUTINE)ThreadFunc,<br>  NULL,<br>  0,<br>  &ThreadID);<br> GetDlgItem(IDC_START)->EnableWindow(FALSE);<br> GetDlgItem(IDC_STOP)->EnableWindow(TRUE);</p> <p>}</p> <p>鍙屽嚮IDC_STOP鎸夐挳錛屽畬鎴愯鎸夐挳鐨勬秷鎭嚱鏁幫細 void CMultiThread1Dlg::OnStop() <br>{<br> // TODO: Add your control notification handler code here<br> m_bRun=FALSE;<br> GetDlgItem(IDC_START)->EnableWindow(TRUE);<br> GetDlgItem(IDC_STOP)->EnableWindow(FALSE);<br>}</p> <p>緙栬瘧騫惰繍琛岃渚嬬▼錛屼綋浼氫嬌鐢╓in32 API緙栧啓鐨勫綰跨▼銆?</p> <p> </p> <p>渚嬬▼2 MultiThread2</p> <p>銆銆璇ョ嚎紼嬫紨紺轟簡濡備綍浼犻佷竴涓竴涓暣鍨嬬殑鍙傛暟鍒頒竴涓嚎紼嬩腑錛屼互鍙婂浣曠瓑寰呬竴涓嚎紼嬪畬鎴愬鐞嗐?/p> <p>寤虹珛涓涓熀浜庡璇濇鐨勫伐紼婱ultiThread2錛屽湪瀵硅瘽妗咺DD_MULTITHREAD2_DIALOG涓姞鍏ヤ竴涓紪杈戞鍜屼竴涓寜閽紝ID鍒嗗埆鏄疘DC_COUNT錛孖DC_START 錛屾寜閽帶浠剁殑鏍囬涓?#8220;寮濮?#8221;錛?<br>鍦∕ultiThread2Dlg.h鏂囦歡涓坊鍔犵嚎紼嬪嚱鏁板0鏄庯細 void ThreadFunc(int integer);</p> <p>娉ㄦ剰錛岀嚎紼嬪嚱鏁扮殑澹版槑搴斿湪綾籆MultiThread2Dlg鐨勫閮ㄣ?/p> <p>鍦ㄧ被CMultiThread2Dlg鍐呴儴娣誨姞protected鍨嬪彉閲?  HANDLE hThread;<br> DWORD ThreadID;</p> <p>鍒嗗埆浠h〃綰跨▼鐨勫彞鏌勫拰ID銆?br>銆 <br>鎵撳紑ClassWizard錛屼負緙栬緫妗咺DC_COUNT娣誨姞int鍨嬪彉閲弇_nCount銆傚湪MultiThread2Dlg.cpp鏂囦歡涓坊鍔狅細void ThreadFunc(int integer)<br>{<br> int i;<br> for(i=0;i<integer;i++)<br> {<br>  Beep(200,50);<br>  Sleep(1000);<br> }<br>} </p> <p>鍙屽嚮IDC_START鎸夐挳錛屽畬鎴愯鎸夐挳鐨勬秷鎭嚱鏁幫細 void CMultiThread2Dlg::OnStart() <br>{<br> UpdateData(TRUE);<br> int integer=m_nCount;<br> hThread=CreateThread(NULL,<br>  0,<br>  (LPTHREAD_START_ROUTINE)ThreadFunc,<br>  (VOID*)integer,<br>  0,<br>  &ThreadID);<br> GetDlgItem(IDC_START)->EnableWindow(FALSE);<br> WaitForSingleObject(hThread,INFINITE);<br> GetDlgItem(IDC_START)->EnableWindow(TRUE);<br>}</p> <p>欏轟究璇翠竴涓媁aitForSingleObject鍑芥暟錛屽叾鍑芥暟鍘熷瀷涓猴細DWORD WaitForSingleObject(HANDLE hHandle,DWORD dwMilliseconds);</p> <p>hHandle涓鴻鐩戣鐨勫璞★紙涓鑸負鍚屾瀵硅薄錛屼篃鍙互鏄嚎紼嬶級鐨勫彞鏌勶紱 <br>dwMilliseconds涓篽Handle瀵硅薄鎵璁劇疆鐨勮秴鏃跺鹼紝鍗曚綅涓烘縐掞紱 <br>銆銆褰撳湪鏌愪竴綰跨▼涓皟鐢ㄨ鍑芥暟鏃訛紝綰跨▼鏆傛椂鎸傝搗錛岀郴緇熺洃瑙唄Handle鎵鎸囧悜鐨勫璞$殑鐘舵併傚鏋滃湪鎸傝搗鐨刣wMilliseconds姣鍐咃紝綰跨▼鎵絳夊緟鐨勫璞″彉涓烘湁淇″彿鐘舵侊紝鍒欒鍑芥暟绔嬪嵆榪斿洖錛涘鏋滆秴鏃舵椂闂村凡緇忓埌杈綿wMilliseconds姣錛屼絾hHandle鎵鎸囧悜鐨勫璞¤繕娌℃湁鍙樻垚鏈変俊鍙風姸鎬侊紝鍑芥暟鐓ф牱榪斿洖銆傚弬鏁癲wMilliseconds鏈変袱涓叿鏈夌壒孌婃剰涔夌殑鍊鹼細0鍜孖NFINITE銆傝嫢涓?錛屽垯璇ュ嚱鏁扮珛鍗寵繑鍥烇紱鑻ヤ負INFINITE錛屽垯綰跨▼涓鐩磋鎸傝搗錛岀洿鍒癶Handle鎵鎸囧悜鐨勫璞″彉涓烘湁淇″彿鐘舵佹椂涓烘銆?br>銆銆鏈緥紼嬭皟鐢ㄨ鍑芥暟鐨勪綔鐢ㄦ槸鎸変笅IDC_START鎸夐挳鍚庯紝涓鐩寸瓑鍒扮嚎紼嬭繑鍥烇紝鍐嶆仮澶岻DC_START鎸夐挳姝e父鐘舵併傜紪璇戣繍琛岃渚嬬▼騫剁粏蹇冧綋浼氥?/p> <p>渚嬬▼3 MultiThread3 <br>浼犻佷竴涓粨鏋勪綋緇欎竴涓嚎紼嬪嚱鏁頒篃鏄彲鑳界殑錛屽彲浠ラ氳繃浼犻佷竴涓寚鍚戠粨鏋勪綋鐨勬寚閽堝弬鏁版潵瀹屾垚銆傚厛瀹氫箟涓涓粨鏋勪綋錛?</p> <p>typedef struct<br>{<br> int firstArgu,<br> long secondArgu,<br>…<br>}myType,*pMyType;</p> <p>鍒涘緩綰跨▼鏃禖reateThread(NULL,0,threadFunc,pMyType,…);<br>鍦╰hreadFunc鍑芥暟鍐呴儴錛屽彲浠ヤ嬌鐢?#8220;寮哄埗杞崲”錛?/p> <p>int intValue=((pMyType)lpvoid)->firstArgu;<br>long longValue=((pMyType)lpvoid)->seconddArgu;<br>……</p> <p>渚嬬▼3 MultiThread3灝嗘紨紺哄浣曚紶閫佷竴涓寚鍚戠粨鏋勪綋鐨勬寚閽堝弬鏁般?</p> <p>寤虹珛涓涓熀浜庡璇濇鐨勫伐紼婱ultiThread3錛屽湪瀵硅瘽妗咺DD_MULTITHREAD3_DIALOG涓姞鍏ヤ竴涓紪杈戞IDC_MILLISECOND錛屼竴涓寜閽甀DC_START錛屾爣棰樹負“寮濮?#8221; 錛屼竴涓繘搴︽潯IDC_PROGRESS1錛?<br>鎵撳紑ClassWizard錛屼負緙栬緫妗咺DC_MILLISECOND娣誨姞int鍨嬪彉閲弇_nMilliSecond錛屼負榪涘害鏉DC_PROGRESS1娣誨姞CProgressCtrl鍨嬪彉閲弇_ctrlProgress錛?<br>鍦∕ultiThread3Dlg.h鏂囦歡涓坊鍔犱竴涓粨鏋勭殑瀹氫箟錛?struct threadInfo<br>{<br> UINT nMilliSecond;<br> CProgressCtrl* pctrlProgress;<br>};</p> <p>綰跨▼鍑芥暟鐨勫0鏄庯細 UINT ThreadFunc(LPVOID lpParam);</p> <p>娉ㄦ剰錛屼簩鑰呭簲鍦ㄧ被CMultiThread3Dlg鐨勫閮ㄣ?</p> <p>鍦ㄧ被CMultiThread3Dlg鍐呴儴娣誨姞protected鍨嬪彉閲? HANDLE hThread;<br>DWORD ThreadID;</p> <p>鍒嗗埆浠h〃綰跨▼鐨勫彞鏌勫拰ID銆?<br>鍦∕ultiThread3Dlg.cpp鏂囦歡涓繘琛屽涓嬫搷浣滐細</p> <p>瀹氫箟鍏叡鍙橀噺 threadInfo Info錛?br>鍙屽嚮鎸夐挳IDC_START錛屾坊鍔犵浉搴旀秷鎭鐞嗗嚱鏁幫細void CMultiThread3Dlg::OnStart() <br>{<br> // TODO: Add your control notification handler code here</p> <p> UpdateData(TRUE);<br> Info.nMilliSecond=m_nMilliSecond;<br> Info.pctrlProgress=&m_ctrlProgress;</p> <p> hThread=CreateThread(NULL,<br>  0,<br>  (LPTHREAD_START_ROUTINE)ThreadFunc,<br>  &Info,<br>  0,<br>  &ThreadID);<br>/*<br> GetDlgItem(IDC_START)->EnableWindow(FALSE);<br> WaitForSingleObject(hThread,INFINITE);<br> GetDlgItem(IDC_START)->EnableWindow(TRUE);<br>*/<br>}</p> <p>鍦ㄥ嚱鏁癇OOL CMultiThread3Dlg::OnInitDialog()涓坊鍔犺鍙ワ細 {<br> ……<br> <br> // TODO: Add extra initialization here<br> m_ctrlProgress.SetRange(0,99);<br> m_nMilliSecond=10;<br> UpdateData(FALSE);<br> return TRUE;  // return TRUE  unless you set the focus to a control<br>}</p> <p>娣誨姞綰跨▼澶勭悊鍑芥暟錛歎INT ThreadFunc(LPVOID lpParam) {<br> threadInfo* pInfo=(threadInfo*)lpParam;<br> for(int i=0;i<100;i++)<br> {<br>  int nTemp=pInfo->nMilliSecond;</p> <p>  pInfo->pctrlProgress->SetPos(i);</p> <p>  Sleep(nTemp);<br> }<br> return 0;<br>}</p> <p>銆銆欏轟究琛ュ厖涓鐐癸紝濡傛灉浣犲湪void CMultiThread3Dlg::OnStart() 鍑芥暟涓坊鍔?* */璇彞錛岀紪璇戣繍琛屼綘灝變細鍙戠幇榪涘害鏉′笉榪涜鍒鋒柊錛屼富綰跨▼涔熷仠姝簡鍙嶅簲銆備粈涔堝師鍥犲憿錛熻繖鏄洜涓篧aitForSingleObject鍑芥暟絳夊緟瀛愮嚎紼嬶紙ThreadFunc錛夌粨鏉熸椂錛屽鑷翠簡綰跨▼姝婚攣銆傚洜涓篧aitForSingleObject鍑芥暟浼氬皢涓葷嚎紼嬫寕璧鳳紙浠諱綍娑堟伅閮藉緱涓嶅埌澶勭悊錛夛紝鑰屽瓙綰跨▼ThreadFunc姝e湪璁劇疆榪涘害鏉★紝涓鐩村湪絳夊緟涓葷嚎紼嬪皢鍒鋒柊娑堟伅澶勭悊瀹屾瘯榪斿洖鎵嶄細媯嫻嬮氱煡浜嬩歡銆傝繖鏍蜂袱涓嚎紼嬮兘鍦ㄤ簰鐩哥瓑寰咃紝姝婚攣鍙戠敓浜嗭紝緙栫▼鏃跺簲娉ㄦ剰閬垮厤銆?<br>渚嬬▼4 MultiThread4<br>璇ヤ緥紼嬫祴璇曞湪Windows涓嬫渶澶氬彲鍒涘緩綰跨▼鐨勬暟鐩?</p> <p><br>寤虹珛涓涓熀浜庡璇濇鐨勫伐紼婱ultiThread4錛屽湪瀵硅瘽妗咺DD_MULTITHREAD4_DIALOG涓姞鍏ヤ竴涓寜閽甀DC_TEST鍜屼竴涓紪杈戞IDC_COUNT錛屾寜閽爣棰樹負“嫻嬭瘯” 錛?緙栬緫妗嗗睘鎬ч変腑Read-only錛?<br>鍦∕ultiThread4Dlg.cpp鏂囦歡涓繘琛屽涓嬫搷浣滐細</p> <p>娣誨姞鍏叡鍙橀噺volatile BOOL m_bRunFlag=TRUE; <br>璇ュ彉閲忚〃紺烘槸鍚﹁繕鑳界戶緇垱寤虹嚎紼嬨?/p> <p>娣誨姞綰跨▼鍑芥暟錛?</p> <p>DWORD WINAPI threadFunc(LPVOID threadNum)<br>{<br> while(m_bRunFlag)<br> {<br>  Sleep(3000);<br> }<br> return 0;<br>}</p> <p>鍙 m_bRunFlag 鍙橀噺涓篢RUE錛岀嚎紼嬩竴鐩磋繍琛屻?/p> <p>鍙屽嚮鎸夐挳IDC_TEST錛屾坊鍔犲叾鍝嶅簲娑堟伅鍑芥暟錛歷oid CMultiThread4Dlg::OnTest() <br>{<br> DWORD threadID;<br> GetDlgItem(IDC_TEST)->EnableWindow(FALSE);<br> long nCount=0;<br> while(m_bRunFlag)<br> {<br>  if(CreateThread(NULL,0,threadFunc,NULL,0,&threadID)==NULL)<br>  {<br>   m_bRunFlag=FALSE;<br>   break;<br>  }<br>  else<br>  {<br>   nCount++;<br>  }<br> }<br>   //涓嶆柇鍒涘緩綰跨▼錛岀洿鍒板啀涓嶈兘鍒涘緩涓烘<br> m_nCount=nCount;<br> UpdateData(FALSE);<br> Sleep(5000);<br>   //寤舵椂5縐掞紝絳夊緟鎵鏈夊垱寤虹殑綰跨▼緇撴潫<br> GetDlgItem(IDC_TEST)->EnableWindow(TRUE);<br>    m_bRunFlag=TRUE;<br>}</p> <p>浜斻丮FC瀵瑰綰跨▼緙栫▼鐨勬敮鎸?/p> <p>銆銆MFC涓湁涓ょ被綰跨▼錛屽垎鍒О涔嬩負宸ヤ綔鑰呯嚎紼嬪拰鐢ㄦ埛鐣岄潰綰跨▼銆備簩鑰呯殑涓昏鍖哄埆鍦ㄤ簬宸ヤ綔鑰呯嚎紼嬫病鏈夋秷鎭驚鐜紝鑰岀敤鎴風晫闈㈢嚎紼嬫湁鑷繁鐨勬秷鎭槦鍒楀拰娑堟伅寰幆銆?br>銆銆宸ヤ綔鑰呯嚎紼嬫病鏈夋秷鎭満鍒訛紝閫氬父鐢ㄦ潵鎵ц鍚庡彴璁$畻鍜岀淮鎶や換鍔★紝濡傚啑闀跨殑璁$畻榪囩▼錛屾墦鍗版満鐨勫悗鍙版墦鍗扮瓑銆傜敤鎴風晫闈㈢嚎紼嬩竴鑸敤浜庡鐞嗙嫭绔嬩簬鍏朵粬綰跨▼鎵ц涔嬪鐨勭敤鎴瘋緭鍏ワ紝鍝嶅簲鐢ㄦ埛鍙婄郴緇熸墍浜х敓鐨勪簨浠跺拰娑堟伅絳夈備絾瀵逛簬Win32鐨凙PI緙栫▼鑰岃█錛岃繖涓ょ綰跨▼鏄病鏈夊尯鍒殑錛屽畠浠兘鍙渶綰跨▼鐨勫惎鍔ㄥ湴鍧鍗沖彲鍚姩綰跨▼鏉ユ墽琛屼換鍔°?br>銆銆鍦∕FC涓紝涓鑸敤鍏ㄥ眬鍑芥暟AfxBeginThread()鏉ュ垱寤哄茍鍒濆鍖栦竴涓嚎紼嬬殑榪愯錛岃鍑芥暟鏈変袱縐嶉噸杞藉艦寮忥紝鍒嗗埆鐢ㄤ簬鍒涘緩宸ヤ綔鑰呯嚎紼嬪拰鐢ㄦ埛鐣岄潰綰跨▼銆備袱縐嶉噸杞藉嚱鏁板師鍨嬪拰鍙傛暟鍒嗗埆璇存槑濡備笅錛?</p> <p>(1) CWinThread* AfxBeginThread(AFX_THREADPROC pfnThreadProc,<br>                      LPVOID pParam,<br>                      nPriority=THREAD_PRIORITY_NORMAL,<br>                      UINT nStackSize=0,<br>                      DWORD dwCreateFlags=0,<br>                      LPSECURITY_ATTRIBUTES lpSecurityAttrs=NULL);</p> <p>PfnThreadProc:鎸囧悜宸ヤ綔鑰呯嚎紼嬬殑鎵ц鍑芥暟鐨勬寚閽堬紝綰跨▼鍑芥暟鍘熷瀷蹇呴』澹版槑濡備笅錛?UINT ExecutingFunction(LPVOID pParam);</p> <p>璇鋒敞鎰忥紝ExecutingFunction()搴旇繑鍥炰竴涓猆INT綾誨瀷鐨勫鹼紝鐢ㄤ互鎸囨槑璇ュ嚱鏁扮粨鏉熺殑鍘熷洜銆備竴鑸儏鍐典笅錛岃繑鍥?琛ㄦ槑鎵ц鎴愬姛銆?<br>pParam錛氫紶閫掔粰綰跨▼鍑芥暟鐨勪竴涓?2浣嶅弬鏁幫紝鎵ц鍑芥暟灝嗙敤鏌愮鏂瑰紡瑙i噴璇ュ箋傚畠鍙互鏄暟鍊鹼紝鎴栨槸鎸囧悜涓涓粨鏋勭殑鎸囬拡錛岀敋鑷沖彲浠ヨ蹇界暐錛?<br>nPriority錛氱嚎紼嬬殑浼樺厛綰с傚鏋滀負0錛屽垯綰跨▼涓庡叾鐖剁嚎紼嬪叿鏈夌浉鍚岀殑浼樺厛綰э紱 <br>nStackSize:綰跨▼涓鴻嚜宸卞垎閰嶅爢鏍堢殑澶у皬錛屽叾鍗曚綅涓哄瓧鑺傘傚鏋渘StackSize琚涓?錛屽垯綰跨▼鐨勫爢鏍堣璁劇疆鎴愪笌鐖剁嚎紼嬪爢鏍堢浉鍚屽ぇ灝忥紱 <br>dwCreateFlags錛氬鏋滀負0錛屽垯綰跨▼鍦ㄥ垱寤哄悗绔嬪埢寮濮嬫墽琛屻傚鏋滀負CREATE_SUSPEND錛屽垯綰跨▼鍦ㄥ垱寤哄悗绔嬪埢琚寕璧鳳紱 <br>lpSecurityAttrs錛氱嚎紼嬬殑瀹夊叏灞炴ф寚閽堬紝涓鑸負NULL錛?<br> (2) CWinThread* AfxBeginThread(CRuntimeClass* pThreadClass,<br>                      int nPriority=THREAD_PRIORITY_NORMAL,<br>                      UINT nStackSize=0,<br>                      DWORD dwCreateFlags=0,<br>                      LPSECURITY_ATTRIBUTES lpSecurityAttrs=NULL);</p> <p><br>銆銆pThreadClass 鏄寚鍚?CWinThread 鐨勪竴涓鍑虹被鐨勮繍琛屾椂綾誨璞$殑鎸囬拡錛岃瀵煎嚭綾誨畾涔変簡琚垱寤虹殑鐢ㄦ埛鐣岄潰綰跨▼鐨勫惎鍔ㄣ侀鍑虹瓑錛涘叾瀹冨弬鏁扮殑鎰忎箟鍚屽艦寮?銆備嬌鐢ㄥ嚱鏁扮殑榪欎釜鍘熷瀷鐢熸垚鐨勭嚎紼嬩篃鏈夋秷鎭満鍒訛紝鍦ㄤ互鍚庣殑渚嬪瓙涓垜浠皢鍙戠幇鍚屼富綰跨▼鐨勬満鍒跺嚑涔庝竴鏍楓?/p> <p>涓嬮潰鎴戜滑瀵笴WinThread綾葷殑鏁版嵁鎴愬憳鍙婂父鐢ㄥ嚱鏁拌繘琛岀畝瑕佽鏄庛?</p> <p>m_hThread錛氬綋鍓嶇嚎紼嬬殑鍙ユ焺錛?<br>m_nThreadID:褰撳墠綰跨▼鐨処D錛?<br>m_pMainWnd錛氭寚鍚戝簲鐢ㄧ▼搴忎富紿楀彛鐨勬寚閽?<br>BOOL CWinThread::CreateThread(DWORD dwCreateFlags=0,<br>UINT nStackSize=0,<br>LPSECURITY_ATTRIBUTES lpSecurityAttrs=NULL);</p> <p>銆銆璇ュ嚱鏁頒腑鐨刣wCreateFlags銆乶StackSize銆乴pSecurityAttrs鍙傛暟鍜孉PI鍑芥暟CreateThread涓殑瀵瑰簲鍙傛暟鏈夌浉鍚屽惈涔夛紝璇ュ嚱鏁版墽琛屾垚鍔燂紝榪斿洖闈?鍊鹼紝鍚﹀垯榪斿洖0銆?br>銆銆涓鑸儏鍐典笅錛岃皟鐢ˋfxBeginThread()鏉ヤ竴嬈℃у湴鍒涘緩騫跺惎鍔ㄤ竴涓嚎紼嬶紝浣嗘槸涔熷彲浠ラ氳繃涓ゆ娉曟潵鍒涘緩綰跨▼錛氶鍏堝垱寤篊WinThread綾葷殑涓涓璞★紝鐒跺悗璋冪敤璇ュ璞$殑鎴愬憳鍑芥暟CreateThread()鏉ュ惎鍔ㄨ綰跨▼銆?</p> <p>virtual BOOL CWinThread::InitInstance();</p> <p>銆銆閲嶈澆璇ュ嚱鏁頒互鎺у埗鐢ㄦ埛鐣岄潰綰跨▼瀹炰緥鐨勫垵濮嬪寲銆傚垵濮嬪寲鎴愬姛鍒欒繑鍥為潪0鍊鹼紝鍚﹀垯榪斿洖0銆傜敤鎴風晫闈㈢嚎紼嬬粡甯擱噸杞借鍑芥暟錛屽伐浣滆呯嚎紼嬩竴鑸笉浣跨敤InitInstance()銆?virtual int CWinThread::ExitInstance();</p> <p>銆銆鍦ㄧ嚎紼嬬粓緇撳墠閲嶈澆璇ュ嚱鏁拌繘琛屼竴浜涘繀瑕佺殑娓呯悊宸ヤ綔銆傝鍑芥暟榪斿洖綰跨▼鐨勯鍑虹爜錛?琛ㄧず鎵ц鎴愬姛錛岄潪0鍊肩敤鏉ユ爣璇嗗悇縐嶉敊璇傚悓InitInstance()鎴愬憳鍑芥暟涓鏍鳳紝璇ュ嚱鏁頒篃鍙傜敤浜庣敤鎴風晫闈㈢嚎紼嬨?<br>鍏丮FC澶氱嚎紼嬬紪紼嬪疄渚?/p> <p>銆銆鍦╒isual C++ 6.0緙栫▼鐜涓紝鎴戜滑鏃㈠彲浠ョ紪鍐機椋庢牸鐨?2浣峎in32搴旂敤紼嬪簭錛屼篃鍙互鍒╃敤MFC綾誨簱緙栧啓C++椋庢牸鐨勫簲鐢ㄧ▼搴忥紝浜岃呭悇鏈夊叾浼樼己鐐廣傚熀浜嶹in32鐨勫簲鐢ㄧ▼搴忔墽琛屼唬鐮佸皬宸э紝榪愯鏁堢巼楂橈紝浣嗚姹傜▼搴忓憳緙栧啓鐨勪唬鐮佽緝澶氾紝涓旈渶瑕佺鐞嗙郴緇熸彁渚涚粰紼嬪簭鐨勬墍鏈夎祫婧愶紱鑰屽熀浜嶮FC綾誨簱鐨勫簲鐢ㄧ▼搴忓彲浠ュ揩閫熷緩绔嬭搗搴旂敤紼嬪簭錛岀被搴撲負紼嬪簭鍛樻彁渚涗簡澶ч噺鐨勫皝瑁呯被錛岃屼笖Developer Studio涓虹▼搴忓憳鎻愪緵浜嗕竴浜涘伐鍏鋒潵綆$悊鐢ㄦ埛婧愮▼搴忥紝鍏剁己鐐規槸綾誨簱浠g爜寰堝簽澶с傜敱浜庝嬌鐢ㄧ被搴撴墍甯︽潵鐨勫揩閫熴佺畝鎹峰拰鍔熻兘寮哄ぇ絳変紭瓚婃э紝鍥犳闄ら潪鏈夌壒孌婄殑闇瑕侊紝鍚﹀垯Visual C++鎺ㄨ崘浣跨敤MFC綾誨簱榪涜紼嬪簭寮鍙戙?/p> <p>鎴戜滑鐭ラ亾錛孧FC涓殑綰跨▼鍒嗕負涓ょ錛氱敤鎴風晫闈㈢嚎紼嬪拰宸ヤ綔鑰呯嚎紼嬨傛垜浠皢鍒嗗埆涓句緥璇存槑銆?/p> <p>鐢?MFC 綾誨簱緙栫▼瀹炵幇宸ヤ綔鑰呯嚎紼?/p> <p>渚嬬▼5 MultiThread5</p> <p>涓轟簡涓嶹in32 API瀵圭収錛屾垜浠嬌鐢∕FC 綾誨簱緙栫▼瀹炵幇渚嬬▼3 MultiThread3銆?/p> <p>寤虹珛涓涓熀浜庡璇濇鐨勫伐紼婱ultiThread5錛屽湪瀵硅瘽妗咺DD_MULTITHREAD5_DIALOG涓姞鍏ヤ竴涓紪杈戞IDC_MILLISECOND錛屼竴涓寜閽甀DC_START錛屾爣棰樹負“寮濮?#8221; 錛屼竴涓繘搴︽潯IDC_PROGRESS1錛?<br>鎵撳紑ClassWizard錛屼負緙栬緫妗咺DC_MILLISECOND娣誨姞int鍨嬪彉閲弇_nMilliSecond錛屼負榪涘害鏉DC_PROGRESS1娣誨姞CProgressCtrl鍨嬪彉閲弇_ctrlProgress錛?<br>鍦∕ultiThread5Dlg.h鏂囦歡涓坊鍔犱竴涓粨鏋勭殑瀹氫箟錛?struct threadInfo<br>{<br> UINT nMilliSecond;<br> CProgressCtrl* pctrlProgress;<br>};</p> <p>綰跨▼鍑芥暟鐨勫0鏄庯細UINT ThreadFunc(LPVOID lpParam); <br>娉ㄦ剰錛屼簩鑰呭簲鍦ㄧ被CMultiThread5Dlg鐨勫閮ㄣ?/p> <p>鍦ㄧ被CMultiThread5Dlg鍐呴儴娣誨姞protected鍨嬪彉閲忥細</p> <p>CWinThread* pThread; <br>鍦∕ultiThread5Dlg.cpp鏂囦歡涓繘琛屽涓嬫搷浣滐細瀹氫箟鍏叡鍙橀噺錛歵hreadInfo Info; <br>鍙屽嚮鎸夐挳IDC_START錛屾坊鍔犵浉搴旀秷鎭鐞嗗嚱鏁幫細</p> <p>void CMultiThread5Dlg::OnStart() <br>{<br> // TODO: Add your control notification handler code here</p> <p> UpdateData(TRUE);<br> Info.nMilliSecond=m_nMilliSecond;<br> Info.pctrlProgress=&m_ctrlProgress;</p> <p> pThread=AfxBeginThread(ThreadFunc,<br>  &Info);<br>}</p> <p>鍦ㄥ嚱鏁癇OOL CMultiThread3Dlg::OnInitDialog()涓坊鍔犺鍙ワ細 {<br> ……<br> <br> // TODO: Add extra initialization here<br> m_ctrlProgress.SetRange(0,99);<br> m_nMilliSecond=10;<br> UpdateData(FALSE);<br> return TRUE;  // return TRUE  unless you set the focus to a control<br>}</p> <p>娣誨姞綰跨▼澶勭悊鍑芥暟錛?UINT ThreadFunc(LPVOID lpParam)<br>{<br> threadInfo* pInfo=(threadInfo*)lpParam;<br> for(int i=0;i<100;i++)<br> {<br>  int nTemp=pInfo->nMilliSecond;</p> <p>  pInfo->pctrlProgress->SetPos(i);</p> <p>  Sleep(nTemp);<br> }<br> return 0;<br>}<br>鐢?MFC 綾誨簱緙栫▼瀹炵幇鐢ㄦ埛鐣岄潰綰跨▼</p> <p>鍒涘緩鐢ㄦ埛鐣岄潰綰跨▼鐨勬楠わ細</p> <p>浣跨敤ClassWizard鍒涘緩綾籆WinThread鐨勬淳鐢熺被錛堜互CUIThread綾諱負渚嬶級 class CUIThread : public CWinThread<br>{<br> DECLARE_DYNCREATE(CUIThread)<br>protected:<br> CUIThread();           // protected constructor used by dynamic creation</p> <p>// Attributes<br>public:</p> <p>// Operations<br>public:</p> <p>// Overrides<br> // ClassWizard generated virtual function overrides<br> //{{AFX_VIRTUAL(CUIThread)<br> public:<br> virtual BOOL InitInstance();<br> virtual int ExitInstance();<br> //}}AFX_VIRTUAL</p> <p>// Implementation<br>protected:<br> virtual ~CUIThread();</p> <p> // Generated message map functions<br> //{{AFX_MSG(CUIThread)<br>  // NOTE - the ClassWizard will add and remove member functions here.<br> //}}AFX_MSG</p> <p> DECLARE_MESSAGE_MAP()<br>};</p> <p>閲嶈澆鍑芥暟InitInstance()鍜孍xitInstance()銆?BOOL CUIThread::InitInstance()<br>{<br> CFrameWnd* wnd=new CFrameWnd;<br> wnd->Create(NULL,"UI Thread Window");<br> wnd->ShowWindow(SW_SHOW);<br> wnd->UpdateWindow();<br> m_pMainWnd=wnd;<br> return TRUE;<br>}</p> <p>鍒涘緩鏂扮殑鐢ㄦ埛鐣岄潰綰跨▼ void CUIThreadDlg::OnButton1() <br>{<br> CUIThread* pThread=new CUIThread();<br> pThread->CreateThread();<br>}</p> <p>璇鋒敞鎰忎互涓嬩袱鐐癸細</p> <p>A銆佸湪UIThreadDlg.cpp鐨勫紑澶村姞鍏ヨ鍙ワ細 #include "UIThread.h"<br>B銆佹妸UIThread.h涓被CUIThread()鐨勬瀯閫犲嚱鏁扮殑鐗規х敱 protected 鏀逛負 public銆?<br>銆銆鐢ㄦ埛鐣岄潰綰跨▼鐨勬墽琛屾搴忎笌搴旂敤紼嬪簭涓葷嚎紼嬬浉鍚岋紝棣栧厛璋冪敤鐢ㄦ埛鐣岄潰綰跨▼綾葷殑InitInstance()鍑芥暟錛屽鏋滆繑鍥濼RUE錛岀戶緇皟鐢ㄧ嚎紼嬬殑Run()鍑芥暟錛岃鍑芥暟鐨勪綔鐢ㄦ槸榪愯涓涓爣鍑嗙殑娑堟伅寰幆錛屽茍涓斿綋鏀跺埌WM_QUIT娑堟伅鍚庝腑鏂紝鍦ㄦ秷鎭驚鐜繃紼嬩腑錛孯un()鍑芥暟媯嫻嬪埌綰跨▼絀洪棽鏃訛紙娌℃湁娑堟伅錛夛紝涔熷皢璋冪敤OnIdle()鍑芥暟錛屾渶鍚嶳un()鍑芥暟榪斿洖錛孧FC璋冪敤ExitInstance()鍑芥暟娓呯悊璧勬簮銆?br>銆銆浣犲彲浠ュ垱寤轟竴涓病鏈夌晫闈㈣屾湁娑堟伅寰幆鐨勭嚎紼嬶紝渚嬪錛氫綘鍙互浠嶤WinThread媧劇敓涓涓柊綾伙紝鍦↖nitInstance鍑芥暟涓畬鎴愭煇欏逛換鍔″茍榪斿洖FALSE錛岃繖琛ㄧず浠呮墽琛孖nitInstance鍑芥暟涓殑浠誨姟鑰屼笉鎵ц娑堟伅寰幆錛屼綘鍙互閫氳繃榪欑鏂規硶錛屽畬鎴愪竴涓伐浣滆呯嚎紼嬬殑鍔熻兘銆?</p> <p>渚嬬▼6 MultiThread6</p> <p>寤虹珛涓涓熀浜庡璇濇鐨勫伐紼婱ultiThread6錛屽湪瀵硅瘽妗咺DD_MULTITHREAD6_DIALOG涓姞鍏ヤ竴涓寜閽甀DC_UI_THREAD錛屾爣棰樹負“鐢ㄦ埛鐣岄潰綰跨▼” <br>鍙沖嚮宸ョ▼騫墮変腑“New Class…”涓哄伐紼嬫坊鍔犲熀綾諱負CWinThread媧劇敓綰跨▼綾籆UIThread銆?<br>緇欏伐紼嬫坊鍔犳柊瀵硅瘽妗咺DD_UITHREADDLG錛屾爣棰樹負“綰跨▼瀵硅瘽妗?#8221;銆?<br>涓哄璇濇IDD_UITHREADDLG鍒涘緩涓涓熀浜嶤Dialog鐨勭被CUIThreadDlg銆備嬌鐢–lassWizard涓篊UIThreadDlg綾繪坊鍔燱M_LBUTTONDOWN娑堟伅鐨勫鐞嗗嚱鏁癘nLButtonDown錛屽涓嬶細 void CUIThreadDlg::OnLButtonDown(UINT nFlags, CPoint point) <br>{<br> AfxMessageBox("You Clicked The Left Button!");<br> CDialog::OnLButtonDown(nFlags, point);<br>}<br>鍦║IThread.h涓坊鍔?#include "UIThreadDlg.h"<br>騫跺湪CUIThread綾諱腑娣誨姞protected鍙橀噺CUIThread m_dlg錛?class CUIThread : public CWinThread<br>{<br> DECLARE_DYNCREATE(CUIThread)<br>protected:<br> CUIThread();           // protected constructor used by dynamic creation</p> <p>// Attributes<br>public:</p> <p>// Operations<br>public:</p> <p>// Overrides<br> // ClassWizard generated virtual function overrides<br> //{{AFX_VIRTUAL(CUIThread)<br> public:<br> virtual BOOL InitInstance();<br> virtual int ExitInstance();<br> //}}AFX_VIRTUAL</p> <p>// Implementation<br>protected:<br> CUIThreadDlg m_dlg;<br> virtual ~CUIThread();</p> <p> // Generated message map functions<br> //{{AFX_MSG(CUIThread)<br>  // NOTE - the ClassWizard will add and remove member functions here.<br> //}}AFX_MSG</p> <p> DECLARE_MESSAGE_MAP()<br>};</p> <p>鍒嗗埆閲嶈澆InitInstance()鍑芥暟鍜孍xitInstance()鍑芥暟錛?BOOL CUIThread::InitInstance()<br>{<br> m_dlg.Create(IDD_UITHREADDLG);<br> m_dlg.ShowWindow(SW_SHOW);<br> m_pMainWnd=&m_dlg;<br> return TRUE;<br>}</p> <p>int CUIThread::ExitInstance()<br>{<br> m_dlg.DestroyWindow();<br> return CWinThread::ExitInstance();<br>}</p> <p>鍙屽嚮鎸夐挳IDC_UI_THREAD錛屾坊鍔犳秷鎭搷搴斿嚱鏁幫細 void CMultiThread6Dlg::OnUiThread() <br>{<br> CWinThread *pThread=AfxBeginThread(RUNTIME_CLASS(CUIThread));<br>}</p> <p>騫跺湪MultiThread6Dlg.cpp鐨勫紑澶存坊鍔狅細 #include "UIThread.h"</p> <p>銆銆濂戒簡錛岀紪璇戝茍榪愯紼嬪簭鍚с傛瘡鍗曞嚮涓嬈?#8220;鐢ㄦ埛鐣岄潰綰跨▼”鎸夐挳錛岄兘浼氬脊鍑轟竴涓嚎紼嬪璇濇錛屽湪浠諱綍涓涓嚎紼嬪璇濇鍐呮寜涓嬮紶鏍囧乏閿紝閮戒細寮瑰嚭涓涓秷鎭銆?br>涓冦佺嚎紼嬮棿閫氳</p> <p>銆銆涓鑸岃█,搴旂敤紼嬪簭涓殑涓涓瑕佺嚎紼嬫繪槸涓轟富綰跨▼鎵ц鐗瑰畾鐨勪換鍔?榪欐牱,涓葷嚎紼嬪拰嬈¤綰跨▼闂村繀瀹氭湁涓涓俊鎭紶閫掔殑娓犻亾,涔熷氨鏄富綰跨▼鍜屾瑕佺嚎紼嬮棿瑕佽繘琛岄氫俊銆傝繖縐嶇嚎紼嬮棿鐨勯氫俊涓嶄絾鏄毦浠ラ伩鍏嶇殑錛岃屼笖鍦ㄥ綰跨▼緙栫▼涓篃鏄鏉傚拰棰戠箒鐨勶紝涓嬮潰灝嗚繘琛岃鏄庛?</p> <p>浣跨敤鍏ㄥ眬鍙橀噺榪涜閫氫俊</p> <p>鐢變簬灞炰簬鍚屼竴涓繘紼嬬殑鍚勪釜綰跨▼鍏變韓鎿嶄綔緋葷粺鍒嗛厤璇ヨ繘紼嬬殑璧勬簮錛屾晠瑙e喅綰跨▼闂撮氫俊鏈綆鍗曠殑涓縐嶆柟娉曟槸浣跨敤鍏ㄥ眬鍙橀噺銆傚浜庢爣鍑嗙被鍨嬬殑鍏ㄥ眬鍙橀噺錛屾垜浠緩璁嬌鐢╲olatile 淇グ絎︼紝瀹冨憡璇夌紪璇戝櫒鏃犻渶瀵硅鍙橀噺浣滀換浣曠殑浼樺寲錛屽嵆鏃犻渶灝嗗畠鏀懼埌涓涓瘎瀛樺櫒涓紝騫朵笖璇ュ煎彲琚閮ㄦ敼鍙樸傚鏋滅嚎紼嬮棿鎵闇浼犻掔殑淇℃伅杈冨鏉傦紝鎴戜滑鍙互瀹氫箟涓涓粨鏋勶紝閫氳繃浼犻掓寚鍚戣緇撴瀯鐨勬寚閽堣繘琛屼紶閫掍俊鎭?br>銆 <br>浣跨敤鑷畾涔夋秷鎭?/p> <p>鎴戜滑鍙互鍦ㄤ竴涓嚎紼嬬殑鎵ц鍑芥暟涓悜鍙︿竴涓嚎紼嬪彂閫佽嚜瀹氫箟鐨勬秷鎭潵杈懼埌閫氫俊鐨勭洰鐨勩備竴涓嚎紼嬪悜鍙﹀涓涓嚎紼嬪彂閫佹秷鎭槸閫氳繃鎿嶄綔緋葷粺瀹炵幇鐨勩傚埄鐢╓indows鎿嶄綔緋葷粺鐨勬秷鎭┍鍔ㄦ満鍒訛紝褰撲竴涓嚎紼嬪彂鍑轟竴鏉℃秷鎭椂錛屾搷浣滅郴緇熼鍏堟帴鏀跺埌璇ユ秷鎭紝鐒跺悗鎶婅娑堟伅杞彂緇欑洰鏍囩嚎紼嬶紝鎺ユ敹娑堟伅鐨勭嚎紼嬪繀欏誨凡緇忓緩绔嬩簡娑堟伅寰幆銆?<br>渚嬬▼7 MultiThread7 </p> <p>銆銆璇ヤ緥紼嬫紨紺轟簡濡備綍浣跨敤鑷畾涔夋秷鎭繘琛岀嚎紼嬮棿閫氫俊銆傞鍏堬紝涓葷嚎紼嬪悜CCalculateThread綰跨▼鍙戦佹秷鎭疻M_CALCULATE錛孋CalculateThread綰跨▼鏀跺埌娑堟伅鍚庤繘琛岃綆楋紝鍐嶅悜涓葷嚎紼嬪彂閫乄M_DISPLAY娑堟伅錛屼富綰跨▼鏀跺埌璇ユ秷鎭悗鏄劇ず璁$畻緇撴灉銆?</p> <p>寤虹珛涓涓熀浜庡璇濇鐨勫伐紼婱ultiThread7錛屽湪瀵硅瘽妗咺DD_MULTITHREAD7_DIALOG涓姞鍏ヤ笁涓崟閫夋寜閽甀DC_RADIO1錛孖DC_RADIO2錛孖DC_RADIO3錛屾爣棰樺垎鍒負1+2+3+4+......+10錛?+2+3+4+......+50錛?+2+3+4+......+100銆傚姞鍏ユ寜閽甀DC_SUM錛屾爣棰樹負“姹傚拰”銆傚姞鍏ユ爣絳炬IDC_STATUS錛屽睘鎬ч変腑“杈規”錛?<br>鍦∕ultiThread7Dlg.h涓畾涔夊涓嬪彉閲忥細 protected:<br> int nAddend;</p> <p>浠h〃鍔犳暟鐨勫ぇ灝忋?/p> <p>鍒嗗埆鍙屽嚮涓変釜鍗曢夋寜閽紝娣誨姞娑堟伅鍝嶅簲鍑芥暟錛歷oid CMultiThread7Dlg::OnRadio1() <br>{<br> nAddend=10;<br>}</p> <p>void CMultiThread7Dlg::OnRadio2() <br>{<br> nAddend=50;<br> <br>}</p> <p>void CMultiThread7Dlg::OnRadio3() <br>{<br> nAddend=100;<br> <br>}<br>騫跺湪OnInitDialog鍑芥暟涓畬鎴愮浉搴旂殑鍒濆鍖栧伐浣滐細 BOOL CMultiThread7Dlg::OnInitDialog()<br>{<br>……<br> ((CButton*)GetDlgItem(IDC_RADIO1))->SetCheck(TRUE);<br> nAddend=10;<br>……</p> <p>鍦∕ultiThread7Dlg.h涓坊鍔狅細 #include "CalculateThread.h"<br>#define WM_DISPLAY WM_USER+2<br>class CMultiThread7Dlg : public CDialog<br>{<br>// Construction<br>public:<br> CMultiThread7Dlg(CWnd* pParent = NULL); // standard constructor<br> CCalculateThread* m_pCalculateThread;<br>……<br>protected:<br> int nAddend;<br> LRESULT OnDisplay(WPARAM wParam,LPARAM lParam);<br>……</p> <p>鍦∕ultiThread7Dlg.cpp涓坊鍔狅細 BEGIN_MESSAGE_MAP(CMultiThread7Dlg, CDialog)<br>……<br> ON_MESSAGE(WM_DISPLAY,OnDisplay)<br>END_MESSAGE_MAP()</p> <p>LRESULT CMultiThread7Dlg::OnDisplay(WPARAM wParam,LPARAM lParam)<br>{<br> int nTemp=(int)wParam;<br> SetDlgItemInt(IDC_STATUS,nTemp,FALSE);</p> <p>  return 0;</p> <p>}<br>浠ヤ笂浠g爜浣垮緱涓葷嚎紼嬬被CMultiThread7Dlg鍙互澶勭悊WM_DISPLAY娑堟伅錛屽嵆鍦↖DC_STATUS鏍囩妗嗕腑鏄劇ず璁$畻緇撴灉銆?<br>鍙屽嚮鎸夐挳IDC_SUM錛屾坊鍔犳秷鎭搷搴斿嚱鏁幫細 void CMultiThread7Dlg::OnSum() <br>{<br> m_pCalculateThread=<br>  (CCalculateThread*)AfxBeginThread(RUNTIME_CLASS(CCalculateThread));</p> <p> Sleep(500);</p> <p> m_pCalculateThread->PostThreadMessage(WM_CALCULATE,nAddend,NULL);<br>}<br>OnSum()鍑芥暟鐨勪綔鐢ㄦ槸寤虹珛CalculateThread綰跨▼錛屽歡鏃剁粰璇ョ嚎紼嬪彂閫乄M_CALCULATE娑堟伅銆?<br>鍙沖嚮宸ョ▼騫墮変腑“New Class…”涓哄伐紼嬫坊鍔犲熀綾諱負 CWinThread 媧劇敓綰跨▼綾?CCalculateThread銆?/p> <p>鍦ㄦ枃浠禖alculateThread.h 涓坊鍔?#define WM_CALCULATE WM_USER+1 <br>class CCalculateThread : public CWinThread<br>{<br>……<br>protected:<br> afx_msg LONG OnCalculate(UINT wParam,LONG lParam);<br>……</p> <p>鍦ㄦ枃浠禖alculateThread.cpp涓坊鍔?LONG CCalculateThread::OnCalculate(UINT wParam,LONG lParam)<br>{<br> int nTmpt=0;<br> for(int i=0;i<=(int)wParam;i++)<br> {<br>  nTmpt=nTmpt+i;<br> }</p> <p> Sleep(500);<br>    ::PostMessage((HWND)(GetMainWnd()->GetSafeHwnd()),WM_DISPLAY,nTmpt,NULL);</p> <p> return 0;<br>}<br>BEGIN_MESSAGE_MAP(CCalculateThread, CWinThread)<br> //{{AFX_MSG_MAP(CCalculateThread)<br>  // NOTE - the ClassWizard will add and remove mapping macros here.<br> //}}AFX_MSG_MAP<br> ON_THREAD_MESSAGE(WM_CALCULATE,OnCalculate)<br>//鍜屼富綰跨▼瀵規瘮錛屾敞鎰忓畠浠殑鍖哄埆<br>END_MESSAGE_MAP()</p> <p>鍦–alculateThread.cpp鏂囦歡鐨勫紑澶存坊鍔犱竴鏉★細 #include "MultiThread7Dlg.h"</p> <p>銆銆浠ヤ笂浠g爜涓恒CCalculateThread銆綾繪坊鍔犱簡 WM_CALCULATE 娑堟伅錛屾秷鎭殑鍝嶅簲鍑芥暟鏄?OnCalculate錛屽叾鍔熻兘鏄牴鎹弬鏁?wParam 鐨勫鹼紝榪涜绱姞錛岀瘡鍔犵粨鏋滃湪涓存椂鍙橀噺nTmpt涓紝寤舵椂0.5縐掞紝鍚戜富綰跨▼鍙戦乄M_DISPLAY娑堟伅榪涜鏄劇ず錛宯Tmpt浣滀負鍙傛暟浼犻掋?<br>緙栬瘧騫惰繍琛岃渚嬬▼,浣撲細濡備綍鍦ㄧ嚎紼嬮棿浼犻掓秷鎭?<br>鍏佺嚎紼嬬殑鍚屾</p> <p>銆銆铏界劧澶氱嚎紼嬭兘緇欐垜浠甫鏉ュソ澶勶紝浣嗘槸涔熸湁涓嶅皯闂闇瑕佽В鍐熾備緥濡傦紝瀵逛簬鍍忕鐩橀┍鍔ㄥ櫒榪欐牱鐙崰鎬х郴緇熻祫婧愶紝鐢變簬綰跨▼鍙互鎵ц榪涚▼鐨勪換浣曚唬鐮佹錛屼笖綰跨▼鐨勮繍琛屾槸鐢辯郴緇熻皟搴﹁嚜鍔ㄥ畬鎴愮殑錛屽叿鏈変竴瀹氱殑涓嶇‘瀹氭э紝鍥犳灝辨湁鍙兘鍑虹幇涓や釜綰跨▼鍚屾椂瀵圭鐩橀┍鍔ㄥ櫒榪涜鎿嶄綔錛屼粠鑰屽嚭鐜版搷浣滈敊璇紱鍙堜緥濡傦紝瀵逛簬閾惰緋葷粺鐨勮綆楁満鏉ヨ錛屽彲鑳戒嬌鐢ㄤ竴涓嚎紼嬫潵鏇存柊鍏剁敤鎴鋒暟鎹簱錛岃岀敤鍙﹀涓涓嚎紼嬫潵璇誨彇鏁版嵁搴撲互鍝嶅簲鍌ㄦ埛鐨勯渶瑕侊紝鏋佹湁鍙兘璇繪暟鎹簱鐨勭嚎紼嬭鍙栫殑鏄湭瀹屽叏鏇存柊鐨勬暟鎹簱錛屽洜涓哄彲鑳藉湪璇葷殑鏃跺欏彧鏈変竴閮ㄥ垎鏁版嵁琚洿鏂拌繃銆?/p> <p>銆銆浣塊毝灞炰簬鍚屼竴榪涚▼鐨勫悇綰跨▼鍗忚皟涓鑷村湴宸ヤ綔縐頒負綰跨▼鐨勫悓姝ャ侻FC鎻愪緵浜嗗縐嶅悓姝ュ璞★紝涓嬮潰鎴戜滑鍙粙緇嶆渶甯哥敤鐨勫洓縐嶏細 </p> <p>涓寸晫鍖猴紙CCriticalSection錛?<br>浜嬩歡錛圕Event錛?<br>浜掓枼閲忥紙CMutex錛?<br>淇″彿閲忥紙CSemaphore錛?br>銆 <br>閫氳繃榪欎簺綾伙紝鎴戜滑鍙互姣旇緝瀹規槗鍦板仛鍒扮嚎紼嬪悓姝ャ?</p> <p>A銆佷嬌鐢?CCriticalSection 綾?</p> <p>銆銆褰撳涓嚎紼嬭闂竴涓嫭鍗犳у叡浜祫婧愭椂,鍙互浣跨敤“涓寸晫鍖?#8221;瀵硅薄銆備換涓鏃跺埢鍙湁涓涓嚎紼嬪彲浠ユ嫢鏈変復鐣屽尯瀵硅薄錛屾嫢鏈変復鐣屽尯鐨勭嚎紼嬪彲浠ヨ闂淇濇姢璧鋒潵鐨勮祫婧愭垨浠g爜孌碉紝鍏朵粬甯屾湜榪涘叆涓寸晫鍖虹殑綰跨▼灝嗚鎸傝搗絳夊緟錛岀洿鍒版嫢鏈変復鐣屽尯鐨勭嚎紼嬫斁寮冧復鐣屽尯鏃朵負姝紝榪欐牱灝變繚璇佷簡涓嶄細鍦ㄥ悓涓鏃跺埢鍑虹幇澶氫釜綰跨▼璁塊棶鍏變韓璧勬簮銆?/p> <p>CCriticalSection綾葷殑鐢ㄦ硶闈炲父綆鍗曪紝姝ラ濡備笅錛?br>銆 </p> <p>瀹氫箟CCriticalSection綾葷殑涓涓叏灞瀵硅薄錛堜互浣垮悇涓嚎紼嬪潎鑳借闂級錛屽CCriticalSection critical_section錛?<br>鍦ㄨ闂渶瑕佷繚鎶ょ殑璧勬簮鎴栦唬鐮佷箣鍓嶏紝璋冪敤CCriticalSection綾葷殑鎴愬憳Lock錛堬級鑾峰緱涓寸晫鍖哄璞★細 critical_section.Lock();</p> <p>鍦ㄧ嚎紼嬩腑璋冪敤璇ュ嚱鏁版潵浣跨嚎紼嬭幏寰楀畠鎵璇鋒眰鐨勪復鐣屽尯銆傚鏋滄鏃舵病鏈夊叾瀹冪嚎紼嬪崰鏈変復鐣屽尯瀵硅薄錛屽垯璋冪敤Lock()鐨勭嚎紼嬭幏寰椾復鐣屽尯錛涘惁鍒欙紝綰跨▼灝嗚鎸傝搗錛屽茍鏀懼叆鍒頒竴涓郴緇熼槦鍒椾腑絳夊緟錛岀洿鍒板綋鍓嶆嫢鏈変復鐣屽尯鐨勭嚎紼嬮噴鏀句簡涓寸晫鍖烘椂涓烘銆?<br>璁塊棶涓寸晫鍖哄畬姣曞悗錛屼嬌鐢–CriticalSection鐨勬垚鍛樺嚱鏁癠nlock()鏉ラ噴鏀句復鐣屽尯錛歝ritical_section.Unlock();</p> <p>鍐嶉氫織涓鐐硅錛屽氨鏄嚎紼婣鎵ц鍒癱ritical_section.Lock();璇彞鏃訛紝濡傛灉鍏跺畠綰跨▼(B)姝e湪鎵цcritical_section.Lock();璇彞鍚庝笖critical_section. Unlock();璇彞鍓嶇殑璇彞鏃訛紝綰跨▼A灝變細絳夊緟錛岀洿鍒扮嚎紼婤鎵ц瀹宑ritical_section. Unlock();璇彞錛岀嚎紼婣鎵嶄細緇х畫鎵ц銆?<br>涓嬮潰鍐嶉氳繃涓涓疄渚嬭繘琛屾紨紺鴻鏄庛?/p> <p><br>渚嬬▼8 MultiThread8</p> <p>寤虹珛涓涓熀浜庡璇濇鐨勫伐紼婱ultiThread8錛屽湪瀵硅瘽妗咺DD_MULTITHREAD8_DIALOG涓姞鍏ヤ袱涓寜閽拰涓や釜緙栬緫妗嗘帶浠訛紝涓や釜鎸夐挳鐨処D鍒嗗埆涓篒DC_WRITEW鍜孖DC_WRITED錛屾爣棰樺垎鍒負“鍐?#8216;W’”鍜?#8220;鍐?#8216;D’”錛涗袱涓紪杈戞鐨処D鍒嗗埆涓篒DC_W鍜孖DC_D錛屽睘鎬ч兘閫変腑Read-only錛?<br>鍦∕ultiThread8Dlg.h鏂囦歡涓0鏄庝袱涓嚎紼嬪嚱鏁幫細 UINT WriteW(LPVOID pParam);<br>UINT WriteD(LPVOID pParam);</p> <p>浣跨敤ClassWizard鍒嗗埆緇橧DC_W鍜孖DC_D娣誨姞CEdit綾誨彉閲弇_ctrlW鍜宮_ctrlD錛?<br>鍦∕ultiThread8Dlg.cpp鏂囦歡涓坊鍔犲涓嬪唴瀹癸細</p> <p>涓轟簡鏂囦歡涓兘澶熸紜嬌鐢ㄥ悓姝ョ被錛屽湪鏂囦歡寮澶存坊鍔狅細#include "afxmt.h"</p> <p>瀹氫箟涓寸晫鍖哄拰涓涓瓧絎︽暟緇勶紝涓轟簡鑳藉鍦ㄤ笉鍚岀嚎紼嬮棿浣跨敤錛屽畾涔変負鍏ㄥ眬鍙橀噺錛欳CriticalSection critical_section;<br>char g_Array[10];</p> <p>娣誨姞綰跨▼鍑芥暟錛歎INT WriteW(LPVOID pParam)<br>{<br> CEdit *pEdit=(CEdit*)pParam;<br> pEdit->SetWindowText("");<br> critical_section.Lock();<br> //閿佸畾涓寸晫鍖猴紝鍏跺畠綰跨▼閬囧埌critical_section.Lock();璇彞鏃惰絳夊緟<br> //鐩磋嚦鎵цcritical_section.Unlock();璇彞<br> for(int i=0;i<10;i++)<br> {<br>  g_Array[i]=''W'';<br>     pEdit->SetWindowText(g_Array);<br>  Sleep(1000);<br> }<br> critical_section.Unlock();<br> return 0;</p> <p>}</p> <p>UINT WriteD(LPVOID pParam)<br>{<br> CEdit *pEdit=(CEdit*)pParam;<br> pEdit->SetWindowText("");<br> critical_section.Lock();<br> //閿佸畾涓寸晫鍖猴紝鍏跺畠綰跨▼閬囧埌critical_section.Lock();璇彞鏃惰絳夊緟<br> //鐩磋嚦鎵цcritical_section.Unlock();璇彞<br> for(int i=0;i<10;i++)<br> {<br>  g_Array[i]=''D'';<br>     pEdit->SetWindowText(g_Array);<br>  Sleep(1000);<br> }<br> critical_section.Unlock();<br> return 0;</p> <p>}<br>鍒嗗埆鍙屽嚮鎸夐挳IDC_WRITEW鍜孖DC_WRITED錛屾坊鍔犲叾鍝嶅簲鍑芥暟錛?void CMultiThread8Dlg::OnWritew() <br>{<br> CWinThread *pWriteW=AfxBeginThread(WriteW,<br>  &m_ctrlW,<br>  THREAD_PRIORITY_NORMAL,<br>  0,<br>  CREATE_SUSPENDED);<br> pWriteW->ResumeThread();<br>}</p> <p>void CMultiThread8Dlg::OnWrited() <br>{<br> CWinThread *pWriteD=AfxBeginThread(WriteD,<br>  &m_ctrlD,<br>  THREAD_PRIORITY_NORMAL,<br>  0,<br>  CREATE_SUSPENDED);<br> pWriteD->ResumeThread();<br> <br>}<br>鐢變簬浠g爜杈冪畝鍗曪紝涓嶅啀璇﹁堪銆傜紪璇戙佽繍琛岃渚嬬▼錛屾偍鍙互榪炵畫鐐瑰嚮涓や釜鎸夐挳錛岃瀵熶綋浼氫復鐣岀被鐨勪綔鐢ㄣ?<br>B銆佷嬌鐢?CEvent 綾?</p> <p>銆銆CEvent 綾繪彁渚涗簡瀵逛簨浠剁殑鏀寔銆備簨浠舵槸涓涓厑璁鎬竴涓嚎紼嬪湪鏌愮鎯呭喌鍙戠敓鏃訛紝鍞ら啋鍙﹀涓涓嚎紼嬬殑鍚屾瀵硅薄銆備緥濡傚湪鏌愪簺緗戠粶搴旂敤紼嬪簭涓紝涓涓嚎紼嬶紙璁頒負A錛夎礋璐g洃鍚氳绔彛錛屽彟澶栦竴涓嚎紼嬶紙璁頒負B錛夎礋璐f洿鏂扮敤鎴鋒暟鎹傞氳繃浣跨敤CEvent 綾伙紝綰跨▼A鍙互閫氱煡綰跨▼B浣曟椂鏇存柊鐢ㄦ埛鏁版嵁銆傛瘡涓涓狢Event 瀵硅薄鍙互鏈変袱縐嶇姸鎬侊細鏈変俊鍙風姸鎬佸拰鏃犱俊鍙風姸鎬併傜嚎紼嬬洃瑙嗕綅浜庡叾涓殑CEvent 綾誨璞$殑鐘舵侊紝騫跺湪鐩稿簲鐨勬椂鍊欓噰鍙栫浉搴旂殑鎿嶄綔銆?br>銆銆鍦∕FC涓紝CEvent 綾誨璞℃湁涓ょ綾誨瀷錛氫漢宸ヤ簨浠跺拰鑷姩浜嬩歡銆備竴涓嚜鍔–Event 瀵硅薄鍦ㄨ鑷沖皯涓涓嚎紼嬮噴鏀懼悗浼氳嚜鍔ㄨ繑鍥炲埌鏃犱俊鍙風姸鎬侊紱鑰屼漢宸ヤ簨浠跺璞¤幏寰椾俊鍙峰悗錛岄噴鏀懼彲鍒╃敤綰跨▼錛屼絾鐩村埌璋冪敤鎴愬憳鍑芥暟ReSetEvent()鎵嶅皢鍏惰緗負鏃犱俊鍙風姸鎬併傚湪鍒涘緩CEvent 綾葷殑瀵硅薄鏃訛紝榛樿鍒涘緩鐨勬槸鑷姩浜嬩歡銆?CEvent 綾葷殑鍚勬垚鍛樺嚱鏁扮殑鍘熷瀷鍜屽弬鏁拌鏄庡涓嬶細</p> <p>1銆丆Event(BOOL bInitiallyOwn=FALSE,<br>          BOOL bManualReset=FALSE,<br>          LPCTSTR lpszName=NULL,<br>          LPSECURITY_ATTRIBUTES lpsaAttribute=NULL);</p> <p><br>bInitiallyOwn:鎸囧畾浜嬩歡瀵硅薄鍒濆鍖栫姸鎬侊紝TRUE涓烘湁淇″彿錛孎ALSE涓烘棤淇″彿錛?<br>bManualReset錛氭寚瀹氳鍒涘緩鐨勪簨浠舵槸灞炰簬浜哄伐浜嬩歡榪樻槸鑷姩浜嬩歡銆俆RUE涓轟漢宸ヤ簨浠訛紝FALSE涓鴻嚜鍔ㄤ簨浠訛紱 <br>鍚庝袱涓弬鏁頒竴鑸涓篘ULL錛屽湪姝や笉浣滆繃澶氳鏄庛?<br>2銆丅OOL CEvent錛氾細SetEvent();</p> <p>銆銆灝?CEvent 綾誨璞$殑鐘舵佽緗負鏈変俊鍙風姸鎬併傚鏋滀簨浠舵槸浜哄伐浜嬩歡錛屽垯 CEvent 綾誨璞′繚鎸佷負鏈変俊鍙風姸鎬侊紝鐩村埌璋冪敤鎴愬憳鍑芥暟ResetEvent()灝?鍏墮噸鏂拌涓烘棤淇″彿鐘舵佹椂涓烘銆傚鏋淐Event 綾誨璞′負鑷姩浜嬩歡錛屽垯鍦⊿etEvent()灝嗕簨浠惰緗負鏈変俊鍙風姸鎬佸悗錛孋Event 綾誨璞$敱緋葷粺鑷姩閲嶇疆涓烘棤淇″彿鐘舵併?/p> <p>濡傛灉璇ュ嚱鏁版墽琛屾垚鍔燂紝鍒欒繑鍥為潪闆跺鹼紝鍚﹀垯榪斿洖闆躲?3銆丅OOL CEvent錛氾細ResetEvent();<br>銆銆璇ュ嚱鏁板皢浜嬩歡鐨勭姸鎬佽緗負鏃犱俊鍙風姸鎬侊紝騫朵繚鎸佽鐘舵佺洿鑷砈etEvent()琚皟鐢ㄦ椂涓烘銆傜敱浜庤嚜鍔ㄤ簨浠舵槸鐢辯郴緇熻嚜鍔ㄩ噸緗紝鏁呰嚜鍔ㄤ簨浠朵笉闇瑕佽皟鐢ㄨ鍑芥暟銆傚鏋滆鍑芥暟鎵ц鎴愬姛錛岃繑鍥為潪闆跺鹼紝鍚﹀垯榪斿洖闆躲傛垜浠竴鑸氳繃璋冪敤WaitForSingleObject鍑芥暟鏉ョ洃瑙嗕簨浠剁姸鎬併傚墠闈㈡垜浠凡緇忎粙緇嶄簡璇ュ嚱鏁般傜敱浜庤璦鎻忚堪鐨勫師鍥狅紝CEvent 綾葷殑鐞嗚В紜疄鏈変簺闅懼害錛屼絾鎮ㄥ彧瑕侀氳繃浠旂粏鐜╁懗涓嬮潰渚嬬▼錛屽鐪嬪嚑閬嶅氨鍙悊瑙c?<br>渚嬬▼9 MultiThread9</p> <p>寤虹珛涓涓熀浜庡璇濇鐨勫伐紼婱ultiThread9錛屽湪瀵硅瘽妗咺DD_MULTITHREAD9_DIALOG涓姞鍏ヤ竴涓寜閽拰涓や釜緙栬緫妗嗘帶浠訛紝鎸夐挳鐨処D涓篒DC_WRITEW錛屾爣棰樹負“鍐?#8216;W’”錛涗袱涓紪杈戞鐨処D鍒嗗埆涓篒DC_W鍜孖DC_D錛屽睘鎬ч兘閫変腑Read-only; <br>鍦∕ultiThread9Dlg.h鏂囦歡涓0鏄庝袱涓嚎紼嬪嚱鏁幫細 UINT WriteW(LPVOID pParam);<br>UINT WriteD(LPVOID pParam);</p> <p>浣跨敤ClassWizard鍒嗗埆緇橧DC_W鍜孖DC_D娣誨姞CEdit綾誨彉閲弇_ctrlW鍜宮_ctrlD錛?<br>鍦∕ultiThread9Dlg.cpp鏂囦歡涓坊鍔犲涓嬪唴瀹癸細 <br>涓轟簡鏂囦歡涓兘澶熸紜嬌鐢ㄥ悓姝ョ被錛屽湪鏂囦歡寮澶存坊鍔?</p> <p>#include "afxmt.h"</p> <p>瀹氫箟浜嬩歡瀵硅薄鍜屼竴涓瓧絎︽暟緇勶紝涓轟簡鑳藉鍦ㄤ笉鍚岀嚎紼嬮棿浣跨敤錛屽畾涔変負鍏ㄥ眬鍙橀噺銆?CEvent eventWriteD;<br>char g_Array[10];</p> <p>娣誨姞綰跨▼鍑芥暟錛?UINT WriteW(LPVOID pParam)<br>{<br> CEdit *pEdit=(CEdit*)pParam;<br> pEdit->SetWindowText("");<br> for(int i=0;i<10;i++)<br> {<br>  g_Array[i]=''W'';<br>     pEdit->SetWindowText(g_Array);<br>  Sleep(1000);<br> }<br> eventWriteD.SetEvent();<br> return 0;</p> <p>}<br>UINT WriteD(LPVOID pParam)<br>{<br> CEdit *pEdit=(CEdit*)pParam;<br> pEdit->SetWindowText("");<br> WaitForSingleObject(eventWriteD.m_hObject,INFINITE);<br> for(int i=0;i<10;i++)<br> {<br>  g_Array[i]=''D'';<br>     pEdit->SetWindowText(g_Array);<br>  Sleep(1000);<br> }<br> return 0;</p> <p>}</p> <p>銆銆浠旂粏鍒嗘瀽榪欎袱涓嚎紼嬪嚱鏁? 鎮ㄥ氨浼氭紜悊瑙Event 綾匯傜嚎紼媁riteD鎵ц鍒?WaitForSingleObject(eventWriteD.m_hObject,INFINITE);澶勭瓑寰咃紝鐩村埌浜嬩歡eventWriteD涓烘湁淇″彿璇ョ嚎紼嬫墠寰涓嬫墽琛岋紝鍥犱負eventWriteD瀵硅薄鏄嚜鍔ㄤ簨浠訛紝鍒欏綋WaitForSingleObject()榪斿洖鏃訛紝緋葷粺鑷姩鎶奺ventWriteD瀵硅薄閲嶇疆涓烘棤淇″彿鐘舵併?<br>鍙屽嚮鎸夐挳IDC_WRITEW錛屾坊鍔犲叾鍝嶅簲鍑芥暟錛?void CMultiThread9Dlg::OnWritew() <br>{<br> CWinThread *pWriteW=AfxBeginThread(WriteW,<br>  &m_ctrlW,<br>  THREAD_PRIORITY_NORMAL,<br>  0,<br>  CREATE_SUSPENDED);<br> pWriteW->ResumeThread();</p> <p> CWinThread *pWriteD=AfxBeginThread(WriteD,<br>  &m_ctrlD,<br>  THREAD_PRIORITY_NORMAL,<br>  0,<br>  CREATE_SUSPENDED);<br> pWriteD->ResumeThread();<br> <br>}<br>緙栬瘧騫惰繍琛岀▼搴忥紝鍗曞嚮“鍐?#8216;W’”鎸夐挳錛屼綋浼氫簨浠跺璞$殑浣滅敤銆?<br>C銆佷嬌鐢–Mutex 綾?/p> <p>銆銆浜掓枼瀵硅薄涓庝復鐣屽尯瀵硅薄寰堝儚.浜掓枼瀵硅薄涓庝復鐣屽尯瀵硅薄鐨勪笉鍚屽湪浜?浜掓枼瀵硅薄鍙互鍦ㄨ繘紼嬮棿浣跨敤,鑰屼復鐣屽尯瀵硅薄鍙兘鍦ㄥ悓涓榪涚▼鐨勫悇綰跨▼闂翠嬌鐢ㄣ傚綋鐒訛紝浜掓枼瀵硅薄涔熷彲浠ョ敤浜庡悓涓榪涚▼鐨勫悇涓嚎紼嬮棿錛屼絾鏄湪榪欑鎯呭喌涓嬶紝浣跨敤涓寸晫鍖轟細鏇磋妭鐪佺郴緇熻祫婧愶紝鏇存湁鏁堢巼銆?/p> <p>D銆佷嬌鐢–Semaphore 綾?/p> <p>銆銆褰撻渶瑕佷竴涓鏁板櫒鏉ラ檺鍒跺彲浠ヤ嬌鐢ㄦ煇涓嚎紼嬬殑鏁扮洰鏃訛紝鍙互浣跨敤“淇″彿閲?#8221;瀵硅薄銆侰Semaphore 綾葷殑瀵硅薄淇濆瓨浜嗗褰撳墠璁塊棶鏌愪竴鎸囧畾璧勬簮鐨勭嚎紼嬬殑璁℃暟鍊鹼紝璇ヨ鏁板兼槸褰撳墠榪樺彲浠ヤ嬌鐢ㄨ璧勬簮鐨勭嚎紼嬬殑鏁扮洰銆傚鏋滆繖涓鏁拌揪鍒頒簡闆訛紝鍒欐墍鏈夊榪欎釜CSemaphore 綾誨璞℃墍鎺у埗鐨勮祫婧愮殑璁塊棶灝濊瘯閮借鏀懼叆鍒頒竴涓槦鍒椾腑絳夊緟錛岀洿鍒拌秴鏃舵垨璁℃暟鍊間笉涓洪浂鏃朵負姝€備竴涓嚎紼嬭閲婃斁宸茶闂簡琚繚鎶ょ殑璧勬簮鏃訛紝璁℃暟鍊煎噺1錛涗竴涓嚎紼嬪畬鎴愪簡瀵硅鎺у叡浜祫婧愮殑璁塊棶鏃訛紝璁℃暟鍊煎1銆傝繖涓CSemaphore 綾誨璞℃墍鎺у埗鐨勮祫婧愬彲浠ュ悓鏃舵帴鍙楄闂殑鏈澶х嚎紼嬫暟鍦ㄨ瀵硅薄鐨勬瀯寤哄嚱鏁頒腑鎸囧畾銆?/p> <p>CSemaphore 綾葷殑鏋勯犲嚱鏁板師鍨嬪強鍙傛暟璇存槑濡備笅錛?</p> <p>CSemaphore (LONG lInitialCount=1,<br>            LONG lMaxCount=1,<br>            LPCTSTR pstrName=NULL,<br>            LPSECURITY_ATTRIBUTES lpsaAttributes=NULL);</p> <p>lInitialCount:淇″彿閲忓璞$殑鍒濆璁℃暟鍊鹼紝鍗沖彲璁塊棶綰跨▼鏁扮洰鐨勫垵濮嬪鹼紱 <br>lMaxCount錛氫俊鍙烽噺瀵硅薄璁℃暟鍊肩殑鏈澶у鹼紝璇ュ弬鏁板喅瀹氫簡鍚屼竴鏃跺埢鍙闂敱淇″彿閲忎繚鎶ょ殑璧勬簮鐨勭嚎紼嬫渶澶ф暟鐩紱 <br>鍚庝袱涓弬鏁板湪鍚屼竴榪涚▼涓嬌鐢ㄤ竴鑸負NULL錛屼笉浣滆繃澶氳璁猴紱 <br>銆銆鍦ㄧ敤CSemaphore 綾葷殑鏋勯犲嚱鏁板垱寤轟俊鍙烽噺瀵硅薄鏃惰鍚屾椂鎸囧嚭鍏佽鐨勬渶澶ц祫婧愯鏁板拰褰撳墠鍙敤璧勬簮璁℃暟銆備竴鑸槸灝嗗綋鍓嶅彲鐢ㄨ祫婧愯鏁拌緗負鏈澶ц祫婧愯鏁幫紝姣忓鍔犱竴涓嚎紼嬪鍏變韓璧勬簮鐨勮闂紝褰撳墠鍙敤璧勬簮璁℃暟灝變細鍑?錛屽彧瑕佸綋鍓嶅彲鐢ㄨ祫婧愯鏁版槸澶т簬0鐨勶紝灝卞彲浠ュ彂鍑轟俊鍙烽噺淇″彿銆備絾鏄綋鍓嶅彲鐢ㄨ鏁板噺灝忓埌0鏃訛紝鍒欒鏄庡綋鍓嶅崰鐢ㄨ祫婧愮殑綰跨▼鏁板凡緇忚揪鍒頒簡鎵鍏佽鐨勬渶澶ф暟鐩紝涓嶈兘鍐嶅厑璁稿叾瀹冪嚎紼嬬殑榪涘叆錛屾鏃剁殑淇″彿閲忎俊鍙峰皢鏃犳硶鍙戝嚭銆傜嚎紼嬪湪澶勭悊瀹屽叡浜祫婧愬悗錛屽簲鍦ㄧ寮鐨勫悓鏃墮氳繃ReleaseSemaphore()鍑芥暟灝嗗綋鍓嶅彲鐢ㄨ祫婧愭暟鍔?銆?/p> <p>涓嬮潰緇欏嚭涓涓畝鍗曞疄渚嬫潵璇存槑 CSemaphore 綾葷殑鐢ㄦ硶銆?/p> <p>渚嬬▼10 MultiThread10</p> <p>寤虹珛涓涓熀浜庡璇濇鐨勫伐紼婱ultiThread10錛屽湪瀵硅瘽妗咺DD_MULTITHREAD10_DIALOG涓姞鍏ヤ竴涓寜閽拰涓変釜緙栬緫妗嗘帶浠訛紝鎸夐挳鐨処D涓篒DC_START錛屾爣棰樹負“鍚屾椂鍐?#8216;A’銆?#8216;B’銆?#8216;C’”錛涗笁涓紪杈戞鐨処D鍒嗗埆涓篒DC_A銆両DC_B鍜孖DC_C錛屽睘鎬ч兘閫変腑Read-only錛?<br>鍦∕ultiThread10Dlg.h鏂囦歡涓0鏄庝袱涓嚎紼嬪嚱鏁幫細 UINT WriteA(LPVOID pParam);<br>UINT WriteB(LPVOID pParam);<br>UINT WriteC(LPVOID pParam); <br>浣跨敤ClassWizard鍒嗗埆緇橧DC_A銆両DC_B鍜孖DC_C娣誨姞CEdit綾誨彉閲弇_ctrlA銆乵_ctrlB鍜宮_ctrlC錛?<br>鍦∕ultiThread10Dlg.cpp鏂囦歡涓坊鍔犲涓嬪唴瀹癸細 <br>涓轟簡鏂囦歡涓兘澶熸紜嬌鐢ㄥ悓姝ョ被錛屽湪鏂囦歡寮澶存坊鍔狅細</p> <p>#include "afxmt.h"</p> <p>瀹氫箟淇″彿閲忓璞″拰涓涓瓧絎︽暟緇勶紝涓轟簡鑳藉鍦ㄤ笉鍚岀嚎紼嬮棿浣跨敤錛屽畾涔変負鍏ㄥ眬鍙橀噺錛欳Semaphore semaphoreWrite(2,2); //璧勬簮鏈澶氳闂嚎紼?涓紝褰撳墠鍙闂嚎紼嬫暟2涓?<br>char g_Array[10]; <br>娣誨姞涓変釜綰跨▼鍑芥暟錛?</p> <p>UINT WriteA(LPVOID pParam)<br>{<br> CEdit *pEdit=(CEdit*)pParam;<br> pEdit->SetWindowText("");<br> WaitForSingleObject(semaphoreWrite.m_hObject,INFINITE);<br> CString str;<br> for(int i=0;i<10;i++)<br> {<br>        pEdit->GetWindowText(str);<br>  g_Array[i]=''A'';<br>  str=str+g_Array[i];<br>     pEdit->SetWindowText(str);<br>  Sleep(1000);<br> }<br> ReleaseSemaphore(semaphoreWrite.m_hObject,1,NULL);<br> return 0;</p> <p>}<br>UINT WriteB(LPVOID pParam)<br>{<br> CEdit *pEdit=(CEdit*)pParam;<br> pEdit->SetWindowText("");<br> WaitForSingleObject(semaphoreWrite.m_hObject,INFINITE);<br> CString str;<br> for(int i=0;i<10;i++)<br> {</p> <p>        pEdit->GetWindowText(str);<br>  g_Array[i]=''B'';<br>  str=str+g_Array[i];<br>     pEdit->SetWindowText(str);<br>  Sleep(1000);<br> }<br> ReleaseSemaphore(semaphoreWrite.m_hObject,1,NULL);<br> return 0;</p> <p>}<br>UINT WriteC(LPVOID pParam)<br>{<br> CEdit *pEdit=(CEdit*)pParam;<br> pEdit->SetWindowText("");<br> WaitForSingleObject(semaphoreWrite.m_hObject,INFINITE);<br> for(int i=0;i<10;i++)<br> {<br>  g_Array[i]=''C'';<br>     pEdit->SetWindowText(g_Array);<br>  Sleep(1000);<br> }<br> ReleaseSemaphore(semaphoreWrite.m_hObject,1,NULL);<br> return 0;</p> <p>}</p> <p>榪欎笁涓嚎紼嬪嚱鏁頒笉鍐嶅璇淬傚湪淇″彿閲忓璞℃湁淇″彿鐨勭姸鎬佷笅錛岀嚎紼嬫墽琛屽埌WaitForSingleObject璇彞澶勭戶緇墽琛岋紝鍚屾椂鍙敤綰跨▼鏁板噺1錛涜嫢綰跨▼鎵ц鍒癢aitForSingleObject璇彞鏃朵俊鍙烽噺瀵硅薄鏃犱俊鍙鳳紝綰跨▼灝卞湪榪欓噷絳夊緟錛岀洿鍒頒俊鍙烽噺瀵硅薄鏈変俊鍙風嚎紼嬫墠寰涓嬫墽琛屻?<br>鍙屽嚮鎸夐挳IDC_START錛屾坊鍔犲叾鍝嶅簲鍑芥暟錛?void CMultiThread10Dlg::OnStart() <br>{<br> CWinThread *pWriteA=AfxBeginThread(WriteA,<br>  &m_ctrlA,<br>  THREAD_PRIORITY_NORMAL,<br>  0,<br>  CREATE_SUSPENDED);<br> pWriteA->ResumeThread();</p> <p> CWinThread *pWriteB=AfxBeginThread(WriteB,<br>  &m_ctrlB,<br>  THREAD_PRIORITY_NORMAL,<br>  0,<br>  CREATE_SUSPENDED);<br> pWriteB->ResumeThread();</p> <p> CWinThread *pWriteC=AfxBeginThread(WriteC,<br>  &m_ctrlC,<br>  THREAD_PRIORITY_NORMAL,<br>  0,<br>  CREATE_SUSPENDED);<br> pWriteC->ResumeThread();</p> <p><br>}</p> <p>濂藉惂錛屽綰跨▼緙栫▼灝變粙緇嶅埌榪欓噷錛屽笇鏈涙湰鏂囪兘瀵規偍鏈夋墍甯姪銆?br></p> <img src ="http://www.shnenglu.com/bhjjkg/aggbug/89132.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/bhjjkg/" target="_blank">Wood_K</a> 2009-07-03 07:56 <a href="http://www.shnenglu.com/bhjjkg/archive/2009/07/03/89132.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>閫掑綊_瀛楃涓插帇緙╀笌瑙e帇{嫻欏ぇACM2571鈥斺擝ig String Outspread}http://www.shnenglu.com/bhjjkg/archive/2009/05/19/83396.htmlWood_KWood_KTue, 19 May 2009 09:27:00 GMThttp://www.shnenglu.com/bhjjkg/archive/2009/05/19/83396.htmlhttp://www.shnenglu.com/bhjjkg/comments/83396.htmlhttp://www.shnenglu.com/bhjjkg/archive/2009/05/19/83396.html#Feedback0http://www.shnenglu.com/bhjjkg/comments/commentRss/83396.htmlhttp://www.shnenglu.com/bhjjkg/services/trackbacks/83396.html 鐐瑰嚮榪涘叆璇ラ鐩?br>

 1#include <stdio.h>
 2void work(char str[1001],int k,int rec)
 3{
 4    int i;
 5    int j;
 6    int kuo;
 7    while(rec--)
 8    {
 9        for(i = k;str[i] != ')' && str[i] != '\0';)
10        {
11            if(str[i] - 'a' >= 0 && str[i] - 'z' <= 25/*瀛楁瘝*/
12                {printf("%c",str[i]);i++;}
13            else if(str[i] == '('/*鎷彿---閫掑綊璋冪敤*/
14            {
15                work(str,i + 1,1);
16                for(kuo = 1,i += 1;kuo != 0;i++)
17                    {
18                        if(str[i] == '(')kuo++;
19                        if(str[i] == ')')kuo--;
20                    }

21            }

22            else /*鏁板瓧*/
23                if(str[i + 1- 'a' >= 0 && str[i + 1- 'a' <= 25/*鏁板瓧+瀛楁瘝*/ 
24                {
25                    for(j = 0;j < str[i] - '0';j++)
26                        printf("%c",str[i + 1]);
27                    i += 2;
28                }

29                else if(str[i + 1== '('/*鏁板瓧+鎷彿---閫掑綊璋冪敤*/
30                {
31                    work(str,i + 2,str[i] - '0');
32                    for(kuo = 1,i += 2;kuo != 0;i++)
33                    {
34                        if(str[i] == '(')kuo++;
35                        if(str[i] == ')')kuo--;
36                    }

37                }

38            }

39        }

40    }

41}

42int main()
43{
44    int T;
45    char str[1001];
46    scanf("%d",&T);
47    getchar();
48    while(T--)
49    {
50        gets(str);
51        work(str,0,1);
52        printf("\n");
53    }

54}

  閫氳繃閫掑綊宸у鐨勯掑綊璋冪敤綆鍖栦簡瑙i姝ラ

Wood_K 2009-05-19 17:27 鍙戣〃璇勮
]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            午夜在线播放视频欧美| 亚洲缚视频在线观看| 亚洲一二三区在线| 国产精品国产三级国产专区53| 亚洲午夜性刺激影院| 一本一本a久久| 国产精品专区第二| 老色鬼久久亚洲一区二区| 久久久久久久999| 最新中文字幕亚洲| 亚洲精品一线二线三线无人区| 欧美三级视频在线| 欧美在线观看视频一区二区三区| 久久狠狠亚洲综合| 亚洲精品一区二区三区福利| 国产主播一区二区三区四区| 老司机免费视频久久| 欧美激情1区2区| 亚洲欧美日韩第一区| 久久精品国产久精国产一老狼| 亚洲国产成人精品久久| 一区二区精品在线观看| 激情综合激情| 一本一本久久| 激情亚洲网站| 一区二区日韩| 在线观看欧美成人| 中国日韩欧美久久久久久久久| 国产有码在线一区二区视频| 亚洲精品韩国| 在线观看的日韩av| 一本大道av伊人久久综合| 激情亚洲网站| 亚洲欧美日韩国产中文| 亚洲精品中文字幕有码专区| 欧美一级片久久久久久久| 亚洲乱码一区二区| 久久国产加勒比精品无码| 亚洲午夜久久久| 久久一区二区三区av| 欧美精品v国产精品v日韩精品| 欧美深夜影院| 欧美国产精品va在线观看| 国产日韩欧美综合在线| 日韩亚洲综合在线| 亚洲国产欧美一区二区三区久久 | 日韩视频免费观看高清完整版| 亚洲欧美视频一区| 亚洲视频观看| 欧美黑人多人双交| 欧美国产在线视频| 国内精品久久久久久久97牛牛| 亚洲无线观看| 亚洲一区二区三区中文字幕在线 | 亚洲一区二区三区三| 99在线精品视频在线观看| 久久手机免费观看| 久久影视三级福利片| 国产亚洲观看| 欧美一区二区福利在线| 久久av一区二区三区亚洲| 国产精品视频久久| 一本色道久久| 亚洲综合国产| 国产精品亚洲成人| 亚洲男人影院| 久久精品99久久香蕉国产色戒| 国产精品日产欧美久久久久| 在线视频一区观看| 午夜精品久久久久影视| 国产精品一区二区三区久久| 亚洲一区二区视频在线| 久久精品123| 韩日精品视频一区| 麻豆精品在线视频| 亚洲电影中文字幕| 国产精品99久久久久久www| 欧美视频中文字幕在线| 亚洲曰本av电影| 久久亚洲精品一区| 亚洲黄色免费网站| 欧美日韩mp4| 亚洲欧美国产不卡| 久久综合九色九九| 亚洲久色影视| 国产精品伦一区| 久久精品国产亚洲精品| 欧美风情在线| 亚洲制服少妇| 在线日韩av永久免费观看| 欧美激情2020午夜免费观看| 一区二区欧美国产| 久久九九热免费视频| 亚洲高清一区二区三区| 欧美另类高清视频在线| 亚洲一区二区三区在线看| 久久综合久久综合久久综合| 999亚洲国产精| 国产精品一区久久久久| 蜜乳av另类精品一区二区| 亚洲美女av网站| 久久免费视频网| 国产一区二区三区久久久| 亚洲欧美日本在线| 亚洲巨乳在线| 亚洲国产精品视频一区| 美女在线一区二区| 国产一区二区三区丝袜 | 亚洲靠逼com| 国产欧美1区2区3区| 牛人盗摄一区二区三区视频| 亚洲免费人成在线视频观看| 亚洲盗摄视频| 久久精品国产一区二区三区免费看| 亚洲精品一品区二品区三品区| 国产欧美精品一区二区三区介绍 | 亚洲在线观看| 亚洲精品综合在线| 欧美高清视频www夜色资源网| 亚洲二区在线观看| 国产日韩在线不卡| 欧美成人日韩| 久久久之久亚州精品露出| 亚洲一二三四区| 日韩亚洲欧美一区二区三区| 免费看的黄色欧美网站| 欧美在线网站| 欧美一二三区在线观看| 99国产精品私拍| 亚洲黄色一区| 亚洲国产欧美日韩| 亚洲国产成人av好男人在线观看| 国产午夜精品一区二区三区欧美 | 亚洲午夜久久久久久久久电影院 | 久久成人资源| 久久一区国产| 久久久91精品国产| 欧美中文字幕| 久久精品国产91精品亚洲| 校园春色综合网| 亚洲欧美一区二区三区在线 | 欧美不卡视频| 欧美88av| 亚洲国产精品电影在线观看| 欧美韩日一区| 亚洲国产美女久久久久| 亚洲国产一区二区精品专区| 欧美激情乱人伦| 亚洲人成毛片在线播放女女| 亚洲人成久久| 亚洲在线观看| 久久av一区二区三区| 久久精品国产亚洲一区二区三区| 久久久久久成人| 久久综合国产精品| 欧美成人资源网| 欧美视频一区在线| 国产精品一区一区三区| 国产一区二区成人久久免费影院| 国精品一区二区三区| 亚洲黄色成人久久久| 99re66热这里只有精品4| 亚洲一本大道在线| 久久精品色图| 亚洲国产高清一区| 99视频在线精品国自产拍免费观看 | 一本色道婷婷久久欧美| 亚洲欧美日韩一区在线| 久久美女艺术照精彩视频福利播放| 麻豆精品视频| av不卡在线| 久久久www成人免费毛片麻豆| 老巨人导航500精品| 欧美国产三级| 欧美在线三区| 欧美成人免费在线观看| 亚洲日韩第九十九页| 亚洲影院污污.| 男人的天堂亚洲| 国产精品毛片在线| 亚洲大片免费看| 亚洲欧美国产日韩天堂区| 久久免费国产精品| 一区二区福利| 裸体素人女欧美日韩| 国产精品日本一区二区| 亚洲经典在线| 久久久久久久久久久久久9999| 亚洲黑丝一区二区| 欧美亚洲一区二区在线| 欧美激情网友自拍| 黄色成人在线网址| 午夜电影亚洲| 亚洲精品网站在线播放gif| 欧美怡红院视频| 欧美午夜宅男影院| 亚洲欧洲一级| 乱码第一页成人| 欧美一二三区精品| 国产精品久久久久久久久久久久久久|