锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲一线二线三线久久久,欧美1级日本1级,亚洲女与黑人做爰 http://m.shnenglu.com/ivenher/articles/15815.html鐖遍キ鐩?/dc:creator>鐖遍キ鐩?/author>Thu, 30 Nov 2006 08:11:00 GMT http://m.shnenglu.com/ivenher/articles/15815.html http://m.shnenglu.com/ivenher/comments/15815.html http://m.shnenglu.com/ivenher/articles/15815.html#Feedback 4 http://m.shnenglu.com/ivenher/comments/commentRss/15815.html http://m.shnenglu.com/ivenher/services/trackbacks/15815.html 鎵浠ュ涔?fàn)澶毦U跨▼緙栫▼鏈閲嶈鐨勪笉鏄涔?fàn)API,鑰屾槸鐞嗚В浠涔堟墠鏄綰跨▼瀹夊叏鐨勪唬鐮?br /> 浠庝緥瀛愯璧?br />#include聽 < windows.h > #include聽< process.h > long 聽global1聽 = 聽 0 ; volatile 聽 long 聽global2聽 = 聽 0 ; class 聽MyClass { public : 聽聽聽聽MyClass()聽:聽m( 0 ) 聽聽聽聽{ 聽聽聽聽聽聽聽聽 ++ m; 聽聽聽聽} 聽聽聽聽 int 聽fun( int 聽v) 聽聽聽聽{ 聽聽聽聽聽聽聽聽 return 聽m + v;聽 // -----------9 聽聽聽聽} 聽聽聽聽 void 聽 set ( int 聽v) 聽聽聽聽{ 聽聽聽聽聽聽聽聽m聽 = 聽v;聽聽聽 // -------------10 聽聽聽聽} 聽聽聽聽 int 聽m; }; MyClass聽global_object;聽 // -------------8 unsigned聽int 聽__stdcall聽thread_fun1( void 聽 * param) { 聽聽聽聽 static 聽 int 聽static2聽 = 聽 0 ; 聽聽聽聽 static 聽MyClass聽static_object;聽 // --------6 聽聽聽聽 int 聽local1聽 = 聽 0 ; 聽聽聽聽 聽聽聽聽 ++ local1;聽聽聽聽聽 // -------1 聽聽聽聽 ++ static2;聽聽聽聽 // -------2 聽聽聽聽 ++ global1;聽聽聽聽 // -------3 聽聽聽聽 ++ global2;聽聽聽聽 // -------4 聽聽聽聽InterlockedIncrement( & global1);聽 // --------5 聽聽聽聽local1聽= 聽global_object.fun(local1);聽 // ----------7 聽聽聽聽global_object.set (local1);聽 // ---------------11 聽聽聽聽return 聽 0 ; } unsigned聽 int 聽__stdcall聽thread_fun2( void 聽 * param) { 聽聽聽聽 ++ global1;聽聽聽聽 // -------3 聽聽聽聽 ++ global2;聽聽聽聽 // -------4 聽聽聽聽InterlockedIncrement( & global1);聽 // --------5 聽聽聽聽global_object.set ( 1 );聽 // -----------11 聽聽聽聽 return 聽 0 ; } int 聽main() { 聽聽聽聽HANDLE聽thread1聽 = 聽(HANDLE)_beginthreadex( 0 , 0 , & thread_fun1, 0 , 0 , 0 );聽 // thread聽1 聽聽聽聽HANDLE聽thread2聽 = 聽(HANDLE)_beginthreadex( 0 , 0 , & thread_fun1, 0 , 0 , 0 );聽 // thread聽2 聽聽聽聽HANDLE聽thread3聽 = 聽(HANDLE)_beginthreadex( 0 , 0 , & thread_fun2, 0 , 0 , 0 );聽 // thread聽3 聽聽聽聽 聽聽聽聽WaitForSingleObject(thread1,INFINITE); 聽聽聽聽WaitForSingleObject(thread2,INFINITE); 聽聽聽聽WaitForSingleObject(thread3,INFINITE); 聽聽聽聽 聽聽聽聽 return 聽 0 ; }
1.灞閮ㄥ彉閲忓眬閮ㄤ嬌鐢ㄦ槸瀹夊叏鐨?br /> 涓轟粈涔?鍥犱負(fù)姣忎釜thread 閮芥湁鑷繁鐨勮繍琛屽爢鏍堬紝鑰屽眬閮ㄥ彉閲忔槸鐢熷瓨鍦ㄥ爢鏍堜腑,澶у涓嶅共鎵般?br />鎵浠ヤ唬鐮? int local1; ++local1; 鏄畨鍏ㄧ殑2.鍏ㄥ眬鍘熺敓鍙橀噺澶氱嚎紼嬭鍐欐槸涓嶅畨鍏ㄧ殑 鍏ㄥ眬鍙橀噺鏄湪鍫?heap)涓?br />long global1 = 0; ++global2; ++榪欎釜鎿嶄綔鍏跺疄鍒嗕負(fù)涓ら儴錛屼竴涓槸璇伙紝鍙﹀涓涓槸鍐?br />聽mov聽聽聽聽聽聽聽聽 ecx,global 聽add聽聽聽聽聽聽聽聽 ecx,1 聽mov聽聽聽聽聽聽聽聽 global,ecx 鎵浠ヤ唬鐮?澶勬槸涓嶅畨鍏ㄧ殑3.鍑芥暟闈欐佸彉閲忓綰跨▼璇誨啓涔熸槸涓嶅畨鍏ㄧ殑 閬撶悊鍚? 鎵浠ヤ唬鐮?澶勪篃鏄笉瀹夊叏鐨?br />4.volatile鑳戒繚璇佸叏灞鏁村艦鍙橀噺鏄綰跨▼瀹夊叏鐨勪箞 涓嶈兘銆?br />volatile浠呬粎鏄憡璇玞ompiler涓嶈瀵硅繖涓彉閲忎綔浼樺寲錛屾瘡嬈¢兘瑕佷粠memory鍙栨暟鍊鹼紝鑰屼笉鏄粠register 鎵浠ヤ唬鐮?涔熶笉鏄畨鍏?br />5.InterlockedIncrement淇濊瘉鏁村瀷鍙橀噺鑷鐨勫師瀛愭?/strong> 鎵浠ヤ唬鐮?鏄畨鍏ㄧ殑6.function static object鐨勫垵濮嬪寲鏄綰跨▼瀹夊叏鐨勪箞 涓嶆槸銆?br />钁楀悕鐨凪eyer Singleton鍏跺疄涓嶆槸綰跨▼瀹夊叏鐨?br />Object & getInstance() {聽 聽聽聽聽 static Object o; 聽聽聽聽 return o; } 鍙兘浼?xì)閫犳垚澶氭鍒濆鍖栧璞?br />鎵浠ヤ唬鐮?澶勬槸涓嶅畨鍏ㄧ殑7.鍦?2鏈哄櫒涓婏紝4瀛楄妭鏁村艦涓嬈ssign鏄師瀛愮殑 姣斿 i =10; //thread1 i=4; //thread2 涓嶄細(xì)瀵艱嚧i鐨勫煎浜庢湭鐭ョ姸鎬?瑕佷箞鏄?0瑕佷箞鏄? 鍐欏ソ澶氱嚎紼嬪畨鍏ㄧ殑娉曞疂灝辨槸灝佽錛屼嬌鏁版嵁鏈変繚鎶ょ殑琚闂埌 瀹夊叏鎬э細(xì) 灞閮ㄥ彉閲?gt;鎴愬憳鍙橀噺>鍏ㄥ眬鍙橀噺 ]]> 娣卞叆嫻呭嚭Win32澶氱嚎紼嬬▼搴忚璁′箣綰跨▼鎺у埗 涓?/title> http://m.shnenglu.com/ivenher/articles/15355.html鐖遍キ鐩?/dc:creator>鐖遍キ鐩?/author>Sat, 18 Nov 2006 06:21:00 GMT http://m.shnenglu.com/ivenher/articles/15355.html http://m.shnenglu.com/ivenher/comments/15355.html http://m.shnenglu.com/ivenher/articles/15355.html#Feedback 0 http://m.shnenglu.com/ivenher/comments/commentRss/15355.html http://m.shnenglu.com/ivenher/services/trackbacks/15355.html 銆銆褰撲竴涓嚎紼嬭棣栨鍒涘緩鏃訛紝瀹冪殑浼樺厛綰х瓑鍚屼簬瀹冩墍灞炶繘紼嬬殑浼樺厛綰с傚湪鍗曚釜榪涚▼鍐呭彲浠ラ氳繃璋冪敤SetThreadPriority鍑芥暟鏀瑰彉綰跨▼鐨勭浉瀵逛紭鍏堢駭銆備竴涓嚎紼嬬殑浼樺厛綰ф槸鐩稿浜庡叾鎵灞炶繘紼嬬殑浼樺厛綰ц岃█鐨勩?br />BOOL SetThreadPriority(HANDLE hThread, int nPriority);
銆銆鍏朵腑鍙傛暟hThread鏄寚鍚戝緟淇敼浼樺厛綰х嚎紼嬬殑鍙ユ焺錛岀嚎紼嬩笌鍖呭惈瀹冪殑榪涚▼鐨勪紭鍏堢駭鍏崇郴濡備笅錛?br /> 銆銆銆綰跨▼浼樺厛綰?= 榪涚▼綾誨熀鏈紭鍏堢駭 + 綰跨▼鐩稿浼樺厛綰?br /> 銆銆榪涚▼綾葷殑鍩烘湰浼樺厛綰у寘鎷細(xì) 銆銆錛?錛夊疄鏃訛細(xì)REALTIME_PRIORITY_CLASS錛?br /> 銆銆錛?錛夐珮錛欻IGH _PRIORITY_CLASS錛?br /> 銆銆錛?錛夐珮浜庢甯革細(xì)ABOVE_NORMAL_PRIORITY_CLASS錛?br /> 銆銆錛?錛夋甯革細(xì)NORMAL _PRIORITY_CLASS錛?br /> 銆銆錛?錛変綆浜庢甯革細(xì)BELOW_ NORMAL _PRIORITY_CLASS錛?br /> 銆銆錛?錛夌┖闂詫細(xì)IDLE_PRIORITY_CLASS銆?br /> 銆銆鎴戜滑浠嶹in32浠誨姟綆$悊鍣ㄤ腑鍙互鐩磋鐨勭湅鍒拌繖鍏釜榪涚▼綾諱紭鍏堢駭錛屽涓嬪浘錛?br /> 銆銆綰跨▼鐨勭浉瀵逛紭鍏堢駭鍖呮嫭錛?br /> 銆銆錛?錛夌┖闂詫細(xì)THREAD_PRIORITY_IDLE錛?br /> 銆銆錛?錛夋渶浣庣嚎紼嬶細(xì)THREAD_PRIORITY_LOWEST錛?br /> 銆銆錛?錛変綆浜庢甯哥嚎紼嬶細(xì)THREAD_PRIORITY_BELOW_NORMAL錛?br /> 銆銆錛?錛夋甯哥嚎紼嬶細(xì)THREAD_PRIORITY_ NORMAL (緙虹渷)錛?br /> 銆銆錛?錛夐珮浜庢甯哥嚎紼嬶細(xì)THREAD_PRIORITY_ABOVE_NORMAL錛?br /> 銆銆錛?錛夋渶楂樼嚎紼嬶細(xì)THREAD_PRIORITY_HIGHEST錛?br /> 銆銆錛?錛夊叧閿椂闂達(dá)細(xì)THREAD_PRIOTITY_CRITICAL銆?br /> 銆銆涓嬪浘緇欏嚭浜嗚繘紼嬩紭鍏堢駭鍜岀嚎紼嬬浉瀵逛紭鍏堢駭鐨勬槧灝勫叧緋伙細(xì) 銆銆渚嬪錛?br />HANDLE hCurrentThread = GetCurrentThread(); //鑾峰緱璇ョ嚎紼嬪彞鏌?br />SetThreadPriority(hCurrentThread, THREAD_PRIORITY_LOWEST);
銆銆6.鐫$湢VOID Sleep(DWORD dwMilliseconds);
銆銆璇ュ嚱鏁板彲浣跨嚎紼嬫殏鍋滆嚜宸辯殑榪愯錛岀洿鍒癲wMilliseconds姣榪囧幓涓烘銆傚畠鍛婅瘔緋葷粺錛岃嚜韜笉鎯沖湪鏌愪釜鏃墮棿孌靛唴琚皟搴︺?br /> 銆銆7.鍏跺畠閲嶈API 銆銆鑾峰緱綰跨▼浼樺厛綰?br /> 銆銆涓涓嚎紼嬭鍒涘緩鏃訛紝灝變細(xì)鏈変竴涓粯璁ょ殑浼樺厛綰э紝浣嗘槸鏈夋椂瑕佸姩鎬佸湴鏀瑰彉涓涓嚎紼嬬殑浼樺厛綰э紝鏈夋椂闇鑾峰緱涓涓嚎紼嬬殑浼樺厛綰с?br />Int GetThreadPriority (HANDLE hThread);
銆銆濡傛灉鍑芥暟鎵ц鍙戠敓閿欒錛屼細(xì)榪斿洖THREAD_PRIORITY_ERROR_RETURN鏍囧織銆傚鏋滃嚱鏁版垚鍔熷湴鎵ц錛屼細(xì)榪斿洖浼樺厛綰ф爣蹇椼?br /> 銆銆鑾峰緱綰跨▼閫鍑虹爜BOOL WINAPI GetExitCodeThread( 銆HANDLE hThread, 銆LPDWORD lpExitCode );
銆銆濡傛灉鎵ц鎴愬姛錛孏etExitCodeThread榪斿洖TRUE錛岄鍑虹爜琚玪pExitCode鎸囧悜鍐呭瓨璁板綍錛涘惁鍒欒繑鍥濬ALSE錛屾垜浠彲閫氳繃GetLastError()鑾風(fēng)煡閿欒鍘熷洜銆傚鏋滅嚎紼嬪皻鏈粨鏉燂紝lpExitCode甯﹀洖鏉ョ殑灝嗘槸STILL_ALIVE銆?br />鑾峰緱/璁劇疆綰跨▼涓婁笅鏂?br />BOOL WINAPI GetThreadContext( 銆HANDLE hThread, 銆LPCONTEXT lpContext ); BOOL WINAPI SetThreadContext( 銆HANDLE hThread, 銆CONST CONTEXT *lpContext );
銆銆鐢變簬GetThreadContext鍜孲etThreadContext鍙互鎿嶄綔CPU鍐呴儴鐨勫瘎瀛樺櫒錛屽洜姝ゅ湪涓浜涢珮綰ф妧宸х殑緙栫▼涓湁涓瀹氬簲鐢ㄣ傝濡傦紝璋冭瘯鍣ㄥ彲鍒╃敤GetThreadContext鎸傝搗琚皟璇曠嚎紼嬭幏鍙栧叾涓婁笅鏂囷紝騫惰緗笂涓嬫枃涓殑鏍囧織瀵勫瓨鍣ㄤ腑鐨勯櫡闃辨爣蹇椾綅錛屾渶鍚庨氳繃SetThreadContext浣胯緗敓鏁堟潵榪涜鍗曟璋冭瘯銆?br /> 銆銆8.瀹炰緥 銆銆浠ヤ笅紼嬪簭浣跨敤CreateThread鍒涘緩涓や釜綰跨▼錛屽湪榪欎袱涓嚎紼嬩腑Sleep涓孌墊椂闂達(dá)紝涓葷嚎紼嬮氳繃GetExitCodeThread鏉ュ垽鏂袱涓嚎紼嬫槸鍚︾粨鏉熻繍琛岋細(xì)#define WIN32_LEAN_AND_MEAN #include <stdio.h> #include <stdlib.h> #include <windows.h> #include <conio.h> DWORD WINAPI ThreadFunc(LPVOID); int main() { 銆HANDLE hThrd1; 銆HANDLE hThrd2; 銆DWORD exitCode1 = 0; 銆DWORD exitCode2 = 0; 銆DWORD threadId; 銆hThrd1 = CreateThread(NULL, 0, ThreadFunc, (LPVOID)1, 0, &threadId ); 銆if (hThrd1) 銆銆printf("Thread 1 launched\n"); 銆hThrd2 = CreateThread(NULL, 0, ThreadFunc, (LPVOID)2, 0, &threadId ); 銆if (hThrd2) 銆銆printf("Thread 2 launched\n"); 銆// Keep waiting until both calls to GetExitCodeThread succeed AND 銆// neither of them returns STILL_ACTIVE. 銆for (;;) 銆{ 銆銆printf("Press any key to exit..\n"); 銆銆getch(); 銆銆GetExitCodeThread(hThrd1, &exitCode1); 銆銆GetExitCodeThread(hThrd2, &exitCode2); 銆銆if ( exitCode1 == STILL_ACTIVE ) 銆銆銆puts("Thread 1 is still running!"); 銆銆if ( exitCode2 == STILL_ACTIVE ) 銆銆銆puts("Thread 2 is still running!"); 銆銆if ( exitCode1 != STILL_ACTIVE && exitCode2 != STILL_ACTIVE ) 銆銆銆break; 銆} 銆CloseHandle(hThrd1); 銆CloseHandle(hThrd2); 銆printf("Thread 1 returned %d\n", exitCode1); 銆printf("Thread 2 returned %d\n", exitCode2); 銆return EXIT_SUCCESS; } /* * Take the startup value, do some simple math on it, * and return the calculated value. */ DWORD WINAPI ThreadFunc(LPVOID n) { 銆Sleep((DWORD)n*1000*2); 銆return (DWORD)n * 10; }
銆銆閫氳繃涓嬮潰鐨勭▼搴忔垜浠彲浠ョ湅鍑哄綰跨▼紼嬪簭榪愯欏哄簭鐨勯毦浠ラ鏂欎互鍙?qiáng)WINAPI鐨凜reateThread鍑芥暟涓嶤榪愯鏃跺簱鐨刜beginthread鐨勫樊鍒細(xì)#define WIN32_LEAN_AND_MEAN #include <stdio.h> #include <stdlib.h> #include <windows.h> DWORD WINAPI ThreadFunc(LPVOID); int main() { 銆HANDLE hThrd; 銆DWORD threadId; 銆int i; 銆for (i = 0; i < 5; i++) 銆{ 銆銆hThrd = CreateThread(NULL, 0, ThreadFunc, (LPVOID)i, 0, &threadId); 銆銆if (hThrd) 銆銆{ 銆銆銆printf("Thread launched %d\n", i); 銆銆銆CloseHandle(hThrd); 銆銆} 銆} 銆// Wait for the threads to complete. 銆Sleep(2000); 銆return EXIT_SUCCESS; } DWORD WINAPI ThreadFunc(LPVOID n) { 銆int i; 銆for (i = 0; i < 10; i++) 銆銆printf("%d%d%d%d%d%d%d%d\n", n, n, n, n, n, n, n, n); 銆return 0; }
銆銆榪愯鐨勮緭鍑哄叿鏈夊緢澶х殑闅忔満鎬э紝榪欓噷鎽樺彇浜嗗嚑嬈$粨鏋滅殑涓閮ㄥ垎錛堝嚑涔庢瘡涓嬈¢兘涓嶅悓錛夛細(xì) 銆銆濡傛灉鎴戜滑浣跨敤鏍囧噯C搴撳嚱鏁拌屼笉鏄綰跨▼鐗堢殑榪愯鏃跺簱錛屽垯紼嬪簭鍙兘杈撳嚭"3333444444"榪欐牱鐨勭粨鏋滐紝鑰屼嬌鐢ㄥ綰跨▼榪愯鏃跺簱鍚庯紝鍒欏彲閬垮厤榪欎竴闂銆?br /> 銆銆涓嬪垪紼嬪簭鍦ㄤ富綰跨▼涓垱寤轟竴涓猄econdThread錛屽湪SecondThread綰跨▼涓氳繃鑷瀵笴ounter璁℃暟鍒?000000錛屼富綰跨▼涓鐩寸瓑寰呭叾緇撴潫錛?br />#include <Win32.h> #include <stdio.h> #include <process.h> unsigned Counter; unsigned __stdcall SecondThreadFunc(void *pArguments) { 銆printf("In second thread...\n"); 銆while (Counter < 1000000) 銆銆Counter++; 銆_endthreadex(0); 銆return 0; } int main() { 銆HANDLE hThread; 銆unsigned threadID; 銆printf("Creating second thread...\n"); 銆// Create the second thread. 銆hThread = (HANDLE)_beginthreadex(NULL, 0, &SecondThreadFunc, NULL, 0, &threadID); 銆// Wait until second thread terminates 銆WaitForSingleObject(hThread, INFINITE); 銆printf("Counter should be 1000000; it is-> %d\n", Counter); 銆// Destroy the thread object. 銆CloseHandle(hThread); }
聽
]]> 娣卞叆嫻呭嚭Win32澶氱嚎紼嬬▼搴忚璁′箣綰跨▼鎺у埗 涓 http://m.shnenglu.com/ivenher/articles/15353.html鐖遍キ鐩?/dc:creator>鐖遍キ鐩?/author>Sat, 18 Nov 2006 06:20:00 GMT http://m.shnenglu.com/ivenher/articles/15353.html http://m.shnenglu.com/ivenher/comments/15353.html http://m.shnenglu.com/ivenher/articles/15353.html#Feedback 0 http://m.shnenglu.com/ivenher/comments/commentRss/15353.html http://m.shnenglu.com/ivenher/services/trackbacks/15353.html
銆銆WIN32綰跨▼鎺у埗涓昏瀹炵幇綰跨▼鐨勫垱寤恒佺粓姝€佹寕璧峰拰鎭㈠絳夋搷浣滐紝榪欎簺鎿嶄綔閮戒緷璧栦簬WIN32鎻愪緵鐨勪竴緇凙PI鍜屽叿浣撶紪璇戝櫒鐨凜榪愯鏃跺簱鍑芥暟銆?br /> 銆銆1.綰跨▼鍑芥暟 銆銆鍦ㄥ惎鍔ㄤ竴涓嚎紼嬩箣鍓嶏紝蹇呴』涓虹嚎紼嬬紪鍐欎竴涓叏灞鐨勭嚎紼嬪嚱鏁幫紝榪欎釜綰跨▼鍑芥暟鎺ュ彈涓涓?2浣嶇殑LPVOID浣滀負(fù)鍙傛暟錛岃繑鍥炰竴涓猆INT錛岀嚎紼嬪嚱鏁扮殑緇撴瀯涓猴細(xì)UINT ThreadFunction(LPVOID pParam) { 銆//綰跨▼澶勭悊浠g爜 銆return0; }
銆銆鍦ㄧ嚎紼嬪鐞嗕唬鐮侀儴鍒嗛氬父鍖呮嫭涓涓寰幆錛岃寰幆涓厛絳夊緟鏌愪簨鎯呯殑鍙戠敓錛屽啀澶勭悊鐩稿叧鐨勫伐浣滐細(xì)while(1) { 銆WaitForSingleObject(鈥?鈥?;//鎴朩aitForMultipleObjects(鈥? 銆//Do something }
銆銆涓鑸潵璇達(dá)紝C++鐨勭被鎴愬憳鍑芥暟涓嶈兘浣滀負(fù)綰跨▼鍑芥暟銆傝繖鏄洜涓哄湪綾諱腑瀹氫箟鐨勬垚鍛樺嚱鏁幫紝緙栬瘧鍣ㄤ細(xì)緇欏叾鍔犱笂this鎸囬拡銆傝鐪嬩笅鍒楃▼搴忥細(xì)#include "windows.h" #include <process.h> class ExampleTask { 銆public: 銆銆void taskmain(LPVOID param); 銆銆void StartTask(); }; void ExampleTask::taskmain(LPVOID param) {} void ExampleTask::StartTask() { 銆_beginthread(taskmain,0,NULL); } int main(int argc, char* argv[]) { 銆ExampleTask realTimeTask; 銆realTimeTask.StartTask(); 銆return 0; }
銆銆紼嬪簭緙栬瘧鏃跺嚭鐜板涓嬮敊璇細(xì)error C2664: '_beginthread' : cannot convert parameter 1 from 'void (void *)' to 'void (__cdecl *)(void *)' None of the functions with this name in scope match the target type
銆銆鍐嶇湅涓嬪垪紼嬪簭錛?br />#include "windows.h" #include <process.h> class ExampleTask { 銆public: 銆銆void taskmain(LPVOID param); }; void ExampleTask::taskmain(LPVOID param) {} int main(int argc, char* argv[]) { 銆ExampleTask realTimeTask; 銆_beginthread(ExampleTask::taskmain,0,NULL); 銆return 0; }
銆銆紼嬪簭緙栬瘧鏃朵細(xì)鍑洪敊錛?br />error C2664: '_beginthread' : cannot convert parameter 1 from 'void (void *)' to 'void (__cdecl *)(void *)' None of the functions with this name in scope match the target type
銆銆濡傛灉涓瀹氳浠ョ被鎴愬憳鍑芥暟浣滀負(fù)綰跨▼鍑芥暟錛岄氬父鏈夊涓嬭В鍐蟲柟妗堬細(xì) 銆銆錛?錛夊皢璇ユ垚鍛樺嚱鏁板0鏄庝負(fù)static綾誨瀷錛屽幓鎺塼his鎸囬拡錛?br /> 銆銆鎴戜滑灝嗕笂榪頒簩涓▼搴忔敼鍙樹負(fù)錛?br />#include "windows.h" #include <process.h> class ExampleTask { 銆public: 銆銆void static taskmain(LPVOID param); 銆銆void StartTask(); }; void ExampleTask::taskmain(LPVOID param) {} void ExampleTask::StartTask() { 銆_beginthread(taskmain,0,NULL); } int main(int argc, char* argv[]) { 銆ExampleTask realTimeTask; 銆realTimeTask.StartTask(); 銆return 0; } 鍜?br />#include "windows.h" #include <process.h> class ExampleTask { 銆public: 銆銆void static taskmain(LPVOID param); }; void ExampleTask::taskmain(LPVOID param) {} int main(int argc, char* argv[]) { 銆_beginthread(ExampleTask::taskmain,0,NULL); 銆return 0; }
銆銆鍧囩紪璇戦氳繃銆?br /> 銆銆灝嗘垚鍛樺嚱鏁板0鏄庝負(fù)闈欐佽櫧鐒跺彲浠ヨВ鍐充綔涓虹嚎紼嬪嚱鏁扮殑闂錛屼絾鏄畠甯︽潵浜嗘柊鐨勯棶棰橈紝閭e氨鏄痵tatic鎴愬憳鍑芥暟鍙兘璁塊棶static鎴愬憳銆傝В鍐蟲闂鐨勪竴縐嶉斿緞鏄彲浠ュ湪璋冪敤綾婚潤鎬佹垚鍛樺嚱鏁幫紙綰跨▼鍑芥暟錛夋椂灝唗his鎸囬拡浣滀負(fù)鍙傛暟浼犲叆錛屽茍鍦ㄦ敼綰跨▼鍑芥暟涓敤寮哄埗綾誨瀷杞崲灝唗his杞崲鎴愭寚鍚戣綾葷殑鎸囬拡錛岄氳繃璇ユ寚閽堣闂潪闈欐佹垚鍛樸?br /> 銆銆錛?錛変笉瀹氫箟綾繪垚鍛樺嚱鏁頒負(fù)綰跨▼鍑芥暟錛岃屽皢綰跨▼鍑芥暟瀹氫箟涓虹被鐨勫弸鍏冨嚱鏁般傝繖鏍鳳紝綰跨▼鍑芥暟涔熷彲浠ユ湁綾繪垚鍛樺嚱鏁板悓絳夌殑鏉冮檺錛? 銆銆鎴戜滑灝嗙▼搴忎慨鏀逛負(fù)錛?br />#include "windows.h" #include <process.h> class ExampleTask { 銆public: 銆銆friend void taskmain(LPVOID param); 銆銆void StartTask(); }; void taskmain(LPVOID param) { 銆ExampleTask * pTaskMain = (ExampleTask *) param; 銆//閫氳繃pTaskMain鎸囬拡寮曠敤 } void ExampleTask::StartTask() { 銆_beginthread(taskmain,0,this); } int main(int argc, char* argv[]) { 銆ExampleTask realTimeTask; 銆realTimeTask.StartTask(); 銆return 0; }
銆銆錛?錛夊彲浠ュ闈為潤鎬佹垚鍛樺嚱鏁板疄鐜板洖璋冿紝騫惰闂潪闈欐佹垚鍛橈紝姝ゆ硶娑夊強(qiáng)鍒頒竴浜涢珮綰ф妧宸э紝鍦ㄦ涓嶅啀璇﹁堪銆?br /> ]]> 娣卞叆嫻呭嚭Win32澶氱嚎紼嬬▼搴忚璁′箣綰跨▼鎺у埗 浜?/title> http://m.shnenglu.com/ivenher/articles/15354.html鐖遍キ鐩?/dc:creator>鐖遍キ鐩?/author>Sat, 18 Nov 2006 06:20:00 GMT http://m.shnenglu.com/ivenher/articles/15354.html http://m.shnenglu.com/ivenher/comments/15354.html http://m.shnenglu.com/ivenher/articles/15354.html#Feedback 0 http://m.shnenglu.com/ivenher/comments/commentRss/15354.html http://m.shnenglu.com/ivenher/services/trackbacks/15354.html 銆銆榪涚▼鐨勪富綰跨▼鐢辨搷浣滅郴緇熻嚜鍔ㄧ敓鎴愶紝W(xué)in32鎻愪緵浜咰reateThread API鏉ュ畬鎴愮敤鎴風(fēng)嚎紼嬬殑鍒涘緩錛岃API鐨勫師鍨嬩負(fù)錛?br />HANDLE CreateThread( 銆LPSECURITY_ATTRIBUTES lpThreadAttributes,//Pointer to a SECURITY_ATTRIBUTES structure 銆SIZE_T dwStackSize, //Initial size of the stack, in bytes. 銆LPTHREAD_START_ROUTINE lpStartAddress, 銆LPVOID lpParameter, //Pointer to a variable to be passed to the thread 銆DWORD dwCreationFlags, //Flags that control the creation of the thread 銆LPDWORD lpThreadId //Pointer to a variable that receives the thread identifier );
銆銆濡傛灉浣跨敤C/C++璇█緙栧啓澶氱嚎紼嬪簲鐢ㄧ▼搴忥紝涓瀹氫笉鑳戒嬌鐢ㄦ搷浣滅郴緇熸彁渚涚殑CreateThread API錛岃屽簲璇ヤ嬌鐢–/C++榪愯鏃跺簱涓殑_beginthread錛堟垨_beginthreadex錛夛紝鍏跺嚱鏁板師鍨嬩負(fù)錛?br />uintptr_t _beginthread( 銆void( __cdecl *start_address )( void * ), //Start address of routine that begins execution of new thread 銆unsigned stack_size, //Stack size for new thread or 0. 銆void *arglist //Argument list to be passed to new thread or NULL ); uintptr_t _beginthreadex( 銆void *security,//Pointer to a SECURITY_ATTRIBUTES structure 銆unsigned stack_size, 銆unsigned ( __stdcall *start_address )( void * ), 銆void *arglist, 銆unsigned initflag,//Initial state of new thread (0 for running or CREATE_SUSPENDED for suspended); 銆unsigned *thrdaddr );
銆銆_beginthread鍑芥暟涓嶹in32 API 涓殑CreateThread鍑芥暟綾諱技錛屼絾鏈夊涓嬪樊寮傦細(xì) 銆銆錛?錛夐氳繃_beginthread鍑芥暟鎴戜滑鍙互鍒╃敤鍏跺弬鏁板垪琛╝rglist灝嗗涓弬鏁頒紶閫掑埌綰跨▼錛? 銆銆錛?錛塤beginthread 鍑芥暟鍒濆鍖栨煇浜?C 榪愯鏃跺簱鍙橀噺錛屽湪綰跨▼涓嫢闇瑕佷嬌鐢?C 榪愯鏃跺簱銆? 銆銆3.緇堟綰跨▼ 銆銆綰跨▼鐨勭粓姝㈡湁濡備笅鍥涚鏂瑰紡錛?br /> 銆銆錛?錛夌嚎紼嬪嚱鏁拌繑鍥烇紱 銆銆錛?錛夌嚎紼嬭嚜韜皟鐢‥xitThread 鍑芥暟鍗崇粓姝㈣嚜宸憋紝鍏跺師鍨嬩負(fù)錛?br />VOID ExitThread(UINT fuExitCode );
銆銆瀹冨皢鍙傛暟fuExitCode璁劇疆涓虹嚎紼嬬殑閫鍑虹爜銆?br /> 銆銆娉ㄦ剰錛氬鏋滀嬌鐢–/C++緙栧啓浠g爜錛屾垜浠簲璇ヤ嬌鐢–/C++榪愯鏃跺簱鍑芥暟_endthread (_endthreadex)緇堟綰跨▼錛屽喅涓嶈兘浣跨敤ExitThread錛?br />_endthread 鍑芥暟瀵逛簬綰跨▼鍐呯殑鏉′歡緇堟寰堟湁鐢ㄣ備緥濡傦紝涓撻棬鐢ㄤ簬閫氫俊澶勭悊鐨勭嚎紼嬭嫢鏃犳硶鑾峰彇瀵歸氫俊绔彛鐨勬帶鍒訛紝鍒欎細(xì)閫鍑恒?br /> 銆銆錛?錛夊悓涓榪涚▼鎴栧叾浠栬繘紼嬬殑綰跨▼璋冪敤TerminateThread鍑芥暟錛屽叾鍘熷瀷涓猴細(xì)BOOL TerminateThread(HANDLE hThread,DWORD dwExitCode);
銆銆璇ュ嚱鏁扮敤鏉ョ粨鏉熺敱hThread鍙傛暟鎸囧畾鐨勭嚎紼嬶紝騫舵妸dwExitCode璁炬垚璇ョ嚎紼嬬殑閫鍑虹爜銆傚綋鏌愪釜綰跨▼涓嶅啀鍝嶅簲鏃訛紝鎴戜滑鍙互鐢ㄥ叾浠栫嚎紼嬭皟鐢ㄨ鍑芥暟鏉ョ粓姝㈣繖涓笉鍝嶅簲鐨勭嚎紼嬨?br /> 銆銆錛?錛夊寘鍚嚎紼嬬殑榪涚▼緇堟銆?br /> 銆銆鏈濂戒嬌鐢ㄧ1縐嶆柟寮忕粓姝㈢嚎紼嬶紝絎?~4縐嶆柟寮忛兘涓嶅疁閲囩敤銆?br /> 銆銆4.鎸傝搗涓庢仮澶嶇嚎紼?br /> 銆銆褰撴垜浠垱寤虹嚎紼嬬殑鏃跺欙紝濡傛灉緇欏叾浼犲叆CREATE_SUSPENDED鏍囧織錛屽垯璇ョ嚎紼嬪垱寤哄悗琚寕璧鳳紝鎴戜滑搴斾嬌鐢≧esumeThread鎭㈠瀹冿細(xì)DWORD ResumeThread(HANDLE hThread);
銆銆濡傛灉ResumeThread鍑芥暟榪愯鎴愬姛錛屽畠?yōu)畣杩斿洖绾拷E嬬殑鍓嶄竴涓殏鍋滆鏁幫紝鍚﹀垯榪斿洖0x FFFFFFFF銆?br /> 銆銆瀵逛簬娌℃湁琚寕璧風(fēng)殑綰跨▼錛岀▼搴忓憳鍙互璋冪敤SuspendThread鍑芥暟寮鴻鎸傝搗涔嬶細(xì)DWORD SuspendThread(HANDLE hThread);
銆銆涓涓嚎紼嬪彲浠ヨ鎸傝搗澶氭銆傜嚎紼嬪彲浠ヨ嚜琛屾殏鍋滆繍琛岋紝浣嗘槸涓嶈兘鑷鎭㈠榪愯銆傚鏋滀竴涓嚎紼嬭鎸傝搗n嬈★紝鍒欒綰跨▼涔熷繀欏昏鎭㈠n嬈℃墠鍙兘寰椾互鎵ц銆?br /> ]]> Win32澶氱嚎紼嬬▼搴忚璁′箣綰跨▼閫氫俊 錛堜笁錛?/title> http://m.shnenglu.com/ivenher/articles/2297.html鐖遍キ鐩?/dc:creator>鐖遍キ鐩?/author>Fri, 30 Dec 2005 10:51:00 GMT http://m.shnenglu.com/ivenher/articles/2297.html http://m.shnenglu.com/ivenher/comments/2297.html http://m.shnenglu.com/ivenher/articles/2297.html#Feedback 2 http://m.shnenglu.com/ivenher/comments/commentRss/2297.html http://m.shnenglu.com/ivenher/services/trackbacks/2297.html 淇″彿閲?BR> 銆銆淇″彿閲忔槸緇存姢0鍒版寚瀹氭渶澶у間箣闂寸殑鍚屾瀵硅薄銆備俊鍙烽噺鐘舵佸湪鍏惰鏁板ぇ浜?鏃舵槸鏈変俊鍙風(fēng)殑錛岃屽叾璁℃暟鏄?鏃舵槸鏃犱俊鍙風(fēng)殑銆備俊鍙烽噺瀵硅薄鍦ㄦ帶鍒朵笂鍙互鏀寔鏈夐檺鏁伴噺鍏變韓璧勬簮鐨勮闂?BR> 銆銆淇″彿閲忕殑鐗圭偣鍜岀敤閫斿彲鐢ㄤ笅鍒楀嚑鍙ヨ瘽瀹氫箟錛?BR> 銆銆錛?錛夊鏋滃綋鍓嶈祫婧愮殑鏁伴噺澶т簬0錛屽垯淇″彿閲忔湁鏁堬紱 銆銆錛?錛夊鏋滃綋鍓嶈祫婧愭暟閲忔槸0錛屽垯淇″彿閲忔棤鏁堬紱 銆銆錛?錛夌郴緇熷喅涓嶅厑璁稿綋鍓嶈祫婧愮殑鏁伴噺涓鴻礋鍊鹼紱 銆銆錛?錛夊綋鍓嶈祫婧愭暟閲忓喅涓嶈兘澶т簬鏈澶ц祫婧愭暟閲忋?BR> 銆銆鍒涘緩淇″彿閲?BR>
HANDLE CreateSemaphore ( 銆PSECURITY_ATTRIBUTE psa, 銆LONG lInitialCount, //寮濮嬫椂鍙緵浣跨敤鐨勮祫婧愭暟 銆LONG lMaximumCount, //鏈澶ц祫婧愭暟 PCTSTR pszName);
銆銆閲婃斁淇″彿閲?BR> 銆銆閫氳繃璋冪敤ReleaseSemaphore鍑芥暟錛岀嚎紼嬪氨鑳藉瀵逛俊鏍囩殑褰撳墠璧勬簮鏁伴噺榪涜閫掑錛岃鍑芥暟鍘熷瀷涓猴細(xì)
BOOL WINAPI ReleaseSemaphore( 銆HANDLE hSemaphore, 銆LONG lReleaseCount, //淇″彿閲忕殑褰撳墠璧勬簮鏁板鍔爈ReleaseCount 銆LPLONG lpPreviousCount );
銆銆鎵撳紑淇″彿閲?BR> 銆銆鍜屽叾浠栨牳蹇冨璞′竴鏍鳳紝淇″彿閲忎篃鍙互閫氳繃鍚嶅瓧璺ㄨ繘紼嬭闂紝鎵撳紑淇″彿閲忕殑API涓猴細(xì)
HANDLE OpenSemaphore ( 銆DWORD fdwAccess , 銆BOOL bInherithandle, 銆PCTSTR pszName );
銆銆浜掗攣璁塊棶 銆銆褰撳繀欏諱互鍘熷瓙鎿嶄綔鏂瑰紡鏉ヤ慨鏀瑰崟涓兼椂錛屼簰閿佽闂嚱鏁版槸鐩稿綋鏈夌敤鐨勩傛墍璋撳師瀛愯闂紝鏄寚綰跨▼鍦ㄨ闂祫婧愭椂鑳藉紜繚鎵鏈夊叾浠栫嚎紼嬮兘涓嶅湪鍚屼竴鏃墮棿鍐呰闂浉鍚岀殑璧勬簮銆?BR> 銆銆璇風(fēng)湅涓嬪垪浠g爜錛?BR>
int globalVar = 0; DWORD WINAPI ThreadFunc1(LPVOID n) { 銆globalVar++; 銆return 0; } DWORD WINAPI ThreadFunc2(LPVOID n) { 銆globalVar++; 銆return 0; }
銆銆榪愯ThreadFunc1鍜孴hreadFunc2綰跨▼錛岀粨鏋滄槸涓嶅彲棰勬枡鐨勶紝鍥犱負(fù)globalVar++騫朵笉瀵瑰簲鐫涓鏉℃満鍣ㄦ寚浠わ紝鎴戜滑鐪嬬湅globalVar++鐨勫弽姹囩紪 浠g爜錛?BR>
00401038 mov eax,[globalVar (0042d3f0)] 0040103D add eax,1 00401040 mov [globalVar (0042d3f0)],eax
銆銆鍦?mov eax,[globalVar (0042d3f0)]" 鎸囦護(hù)涓?add eax,1" 鎸囦護(hù)浠ュ強(qiáng)"add eax,1" 鎸囦護(hù)涓?mov [globalVar (0042d3f0)],eax"鎸囦護(hù)涔嬮棿閮藉彲鑳藉彂鐢熺嚎紼嬪垏鎹紝浣垮緱紼嬪簭鐨勬墽琛屽悗globalVar鐨勭粨鏋滀笉鑳界‘瀹氥傛垜浠彲浠ヤ嬌鐢↖nterlockedExchange Add鍑芥暟瑙e喅榪欎釜闂錛?BR>
int globalVar = 0; DWORD WINAPI ThreadFunc1(LPVOID n) { 銆InterlockedExchangeAdd(&globalVar,1); 銆return 0; } DWORD WINAPI ThreadFunc2(LPVOID n) { 銆InterlockedExchangeAdd(&globalVar,1); 銆return 0; }
銆銆InterlockedExchangeAdd淇濊瘉瀵瑰彉閲廹lobalVar鐨勮闂叿鏈?鍘熷瓙鎬?銆備簰閿佽闂殑鎺у埗閫熷害闈炲父蹇紝璋冪敤涓涓簰閿佸嚱鏁扮殑CPU鍛ㄦ湡閫氬父灝忎簬50錛屼笉闇瑕佽繘琛岀敤鎴鋒柟寮忎笌鍐呮牳鏂瑰紡鐨勫垏鎹紙璇ュ垏鎹㈤氬父闇瑕佽繍琛?000涓狢PU鍛ㄦ湡錛夈?BR> 銆銆浜掗攣璁塊棶鍑芥暟鐨勭己鐐瑰湪浜庡叾鍙兘瀵瑰崟涓鍙橀噺榪涜鍘熷瓙璁塊棶錛屽鏋滆璁塊棶鐨勮祫婧愭瘮杈冨鏉傦紝浠嶈浣跨敤涓寸晫鍖烘垨浜掓枼銆?BR> 銆銆鍙瓑寰呭畾鏃跺櫒 銆銆鍙瓑寰呭畾鏃跺櫒鏄湪鏌愪釜鏃墮棿鎴栨寜瑙勫畾鐨勯棿闅旀椂闂村彂鍑鴻嚜宸辯殑淇″彿閫氱煡鐨勫唴鏍稿璞°傚畠浠氬父鐢ㄦ潵鍦ㄦ煇涓椂闂存墽琛屾煇涓搷浣溿?BR> 銆銆鍒涘緩鍙瓑寰呭畾鏃跺櫒
HANDLE CreateWaitableTimer( 銆PSECURITY_ATTRISUTES psa, 銆BOOL fManualReset,//浜哄伐閲嶇疆鎴栬嚜鍔ㄩ噸緗畾鏃跺櫒 PCTSTR pszName);
銆銆璁劇疆鍙瓑寰呭畾鏃跺櫒 銆銆鍙瓑寰呭畾鏃跺櫒瀵硅薄鍦ㄩ潪嬋媧葷姸鎬佷笅琚垱寤猴紝紼嬪簭鍛樺簲璋冪敤 SetWaitableTimer鍑芥暟鏉ョ晫瀹氬畾鏃跺櫒鍦ㄤ綍鏃惰嬋媧伙細(xì)
BOOL SetWaitableTimer( 銆HANDLE hTimer, //瑕佽緗殑瀹氭椂鍣?BR>銆const LARGE_INTEGER *pDueTime, //鎸囨槑瀹氭椂鍣ㄧ涓嬈℃縺媧葷殑鏃墮棿 銆LONG lPeriod, //鎸囨槑姝ゅ悗瀹氭椂鍣ㄥ簲璇ラ棿闅斿闀挎椂闂存縺媧諱竴嬈?BR>銆PTIMERAPCROUTINE pfnCompletionRoutine, 銆PVOID PvArgToCompletionRoutine, BOOL fResume);
銆銆鍙栨秷鍙瓑寰呭畾鏃跺櫒
BOOl Cancel WaitableTimer( 銆HANDLE hTimer //瑕佸彇娑堢殑瀹氭椂鍣?BR>);
銆銆鎵撳紑鍙瓑寰呭畾鏃跺櫒 銆銆浣滀負(fù)涓縐嶅唴鏍稿璞★紝W(xué)aitableTimer涔熷彲浠ヨ鍏朵粬榪涚▼浠ュ悕瀛楁墦寮錛?BR>
HANDLE OpenWaitableTimer ( 銆DWORD fdwAccess, 銆BOOL bInherithandle, 銆PCTSTR pszName );
銆銆瀹炰緥 銆銆涓嬮潰緇欏嚭鐨勪竴涓▼搴忓彲鑳藉彂鐢熸閿佺幇璞★細(xì)
#include <Windows .h> #include <stdio.h> CRITICAL_SECTION cs1, cs2; long WINAPI ThreadFn(long); main() { 銆long iThreadID; 銆InitializeCriticalSection(&cs1); 銆InitializeCriticalSection(&cs2); 銆CloseHandle(CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadFn, NULL, 0,&iThreadID)); 銆while (TRUE) 銆{ 銆銆EnterCriticalSection(&cs1); 銆銆printf("\n綰跨▼1鍗犵敤涓寸晫鍖?"); 銆銆EnterCriticalSection(&cs2); 銆銆printf("\n綰跨▼1鍗犵敤涓寸晫鍖?"); 銆銆printf("\n綰跨▼1鍗犵敤涓や釜涓寸晫鍖?); 銆銆LeaveCriticalSection(&cs2); 銆銆LeaveCriticalSection(&cs1); 銆銆printf("\n綰跨▼1閲婃斁涓や釜涓寸晫鍖?); 銆銆Sleep(20); 銆}; 銆return (0); } long WINAPI ThreadFn(long lParam) { 銆while (TRUE) 銆{ 銆銆EnterCriticalSection(&cs2); 銆銆printf("\n綰跨▼2鍗犵敤涓寸晫鍖?"); 銆銆EnterCriticalSection(&cs1); 銆銆printf("\n綰跨▼2鍗犵敤涓寸晫鍖?"); 銆銆printf("\n綰跨▼2鍗犵敤涓や釜涓寸晫鍖?); 銆銆LeaveCriticalSection(&cs1); 銆銆LeaveCriticalSection(&cs2); 銆銆printf("\n綰跨▼2閲婃斁涓や釜涓寸晫鍖?); 銆銆Sleep(20); 銆}; }
銆銆榪愯榪欎釜紼嬪簭錛屽湪涓斾竴鏃﹀彂鐢熻繖鏍風(fēng)殑杈撳嚭錛?BR> 銆銆綰跨▼1鍗犵敤涓寸晫鍖? 銆銆綰跨▼2鍗犵敤涓寸晫鍖? 銆銆鎴?BR> 銆銆綰跨▼2鍗犵敤涓寸晫鍖? 銆銆綰跨▼1鍗犵敤涓寸晫鍖? 銆銆鎴?BR> 銆銆綰跨▼1鍗犵敤涓寸晫鍖? 銆銆綰跨▼2鍗犵敤涓寸晫鍖? 銆銆鎴?BR> 銆銆綰跨▼2鍗犵敤涓寸晫鍖? 銆銆綰跨▼1鍗犵敤涓寸晫鍖? 銆銆紼嬪簭灝?姝?鎺変簡錛屽啀涔熻繍琛屼笉涓嬪幓銆傚洜涓鴻繖鏍風(fēng)殑杈撳嚭錛屾剰鍛崇潃涓や釜綰跨▼鐩鎬簰絳夊緟瀵規(guī)柟閲婃斁涓寸晫鍖猴紝涔熷嵆鍑虹幇浜嗘閿併?BR> 銆銆濡傛灉鎴戜滑灝嗙嚎紼?鐨勬帶鍒跺嚱鏁版敼涓猴細(xì)
long WINAPI ThreadFn(long lParam) { 銆while (TRUE) 銆{ 銆銆EnterCriticalSection(&cs1); 銆銆printf("\n綰跨▼2鍗犵敤涓寸晫鍖?"); 銆銆EnterCriticalSection(&cs2); 銆銆printf("\n綰跨▼2鍗犵敤涓寸晫鍖?"); 銆銆printf("\n綰跨▼2鍗犵敤涓や釜涓寸晫鍖?); 銆銆LeaveCriticalSection(&cs1); 銆銆LeaveCriticalSection(&cs2); 銆銆printf("\n綰跨▼2閲婃斁涓や釜涓寸晫鍖?); 銆銆Sleep(20); 銆}; }
銆銆鍐嶆榪愯紼嬪簭錛屾閿佽娑堥櫎錛岀▼搴忎笉鍐嶆尅鎺夈傝繖鏄洜涓烘垜浠敼鍙樹簡綰跨▼2涓幏寰椾復(fù)鐣屽尯1銆?鐨勯『搴忥紝娑堥櫎浜嗙嚎紼?銆?鐩鎬簰絳夊緟璧勬簮鐨勫彲鑳芥с?BR> 銆銆鐢辨鎴戜滑寰楀嚭緇撹錛屽湪浣跨敤綰跨▼闂寸殑鍚屾鏈哄埗鏃訛紝瑕佺壒鍒暀蹇冩閿佺殑鍙戠敓銆?BR> ]]> Win32澶氱嚎紼嬬▼搴忚璁′箣綰跨▼閫氫俊 錛堜簩錛?/title> http://m.shnenglu.com/ivenher/articles/2296.html鐖遍キ鐩?/dc:creator>鐖遍キ鐩?/author>Fri, 30 Dec 2005 10:50:00 GMT http://m.shnenglu.com/ivenher/articles/2296.html http://m.shnenglu.com/ivenher/comments/2296.html http://m.shnenglu.com/ivenher/articles/2296.html#Feedback 0 http://m.shnenglu.com/ivenher/comments/commentRss/2296.html http://m.shnenglu.com/ivenher/services/trackbacks/2296.html 涓寸晫鍖?BR> 銆銆瀹氫箟涓寸晫鍖哄彉閲?BR>
CRITICAL_SECTION gCriticalSection;
銆銆閫氬父鎯呭喌涓嬶紝CRITICAL_SECTION緇撴瀯浣撳簲璇ヨ瀹氫箟涓哄叏灞鍙橀噺錛屼互渚夸簬榪涚▼涓殑鎵鏈夌嚎紼嬫柟渚垮湴鎸夌収鍙橀噺鍚嶆潵寮曠敤璇ョ粨鏋勪綋銆?BR> 銆銆鍒濆鍖栦復(fù)鐣屽尯
VOID WINAPI InitializeCriticalSection( 銆LPCRITICAL_SECTION lpCriticalSection 銆//鎸囧悜紼嬪簭鍛樺畾涔夌殑CRITICAL_SECTION鍙橀噺 );
銆銆璇ュ嚱鏁扮敤浜庡pcs鎵鎸囩殑CRITICAL_SECTION緇撴瀯浣撹繘琛屽垵濮嬪寲銆傝鍑芥暟鍙槸璁劇疆浜嗕竴浜涙垚鍛樺彉閲忥紝瀹冪殑榪愯涓鑸笉浼?xì)澶辫触锛屽洜姝ゅ畠閲囩敤浜哣OID綾誨瀷鐨勮繑鍥炲箋傝鍑芥暟蹇呴』鍦ㄤ換浣曠嚎紼嬭皟鐢‥nterCriticalSection鍑芥暟涔嬪墠琚皟鐢紝濡傛灉涓涓嚎紼嬭瘯鍥捐繘鍏ヤ竴涓湭鍒濆鍖栫殑CRTICAL_SECTION錛岄偅涔堢粨鏋滃皢鏄緢闅鵑璁$殑銆?BR> 銆銆鍒犻櫎涓寸晫鍖?BR>
VOID WINAPI DeleteCriticalSection( 銆LPCRITICAL_SECTION lpCriticalSection 銆//鎸囧悜涓涓笉鍐嶉渶瑕佺殑CRITICAL_SECTION鍙橀噺 );
銆銆榪涘叆涓寸晫鍖?BR>
VOID WINAPI EnterCriticalSection( 銆LPCRITICAL_SECTION lpCriticalSection 銆//鎸囧悜涓涓綘鍗沖皢閿佸畾鐨凜RITICAL_SECTION鍙橀噺 );
銆銆紱誨紑涓寸晫鍖?BR>
VOID WINAPI LeaveCriticalSection( 銆LPCRITICAL_SECTION lpCriticalSection 銆//鎸囧悜涓涓綘鍗沖皢紱誨紑鐨凜RITICAL_SECTION鍙橀噺 );
銆銆浣跨敤涓寸晫鍖虹紪紼嬬殑涓鑸柟娉曟槸錛?BR>
void UpdateData() { 銆EnterCriticalSection(&gCriticalSection); 銆...//do something 銆LeaveCriticalSection(&gCriticalSection); }
銆銆鍏充簬涓寸晫鍖虹殑浣跨敤錛屾湁涓嬪垪娉ㄦ剰鐐癸細(xì) 銆銆錛?錛夋瘡涓叡浜祫婧愪嬌鐢ㄤ竴涓狢RITICAL_SECTION鍙橀噺錛?BR> 銆銆錛?錛変笉瑕侀暱鏃墮棿榪愯鍏抽敭浠g爜孌碉紝褰撲竴涓叧閿唬鐮佹闀挎椂闂磋繍琛屾椂錛屽叾浠栫嚎紼嬪氨浼?xì)杩涘叆绛夊緟鐘舵侊紝榪欎細(xì)闄嶄綆搴旂敤紼嬪簭鐨勮繍琛屾ц兘錛?BR> 銆銆錛?錛夊鏋滈渶瑕佸悓鏃惰闂涓祫婧愶紝鍒欏彲鑳借繛緇皟鐢‥nterCriticalSection錛?BR> 銆銆錛?錛塁ritical Section涓嶆槸OS鏍稿績瀵硅薄錛屽鏋滆繘鍏ヤ復(fù)鐣屽尯鐨勭嚎紼?鎸?浜嗭紝灝嗘棤娉曢噴鏀句復(fù)鐣岃祫婧愩傝繖涓己鐐瑰湪Mutex涓緱鍒頒簡寮ヨˉ銆?BR> 銆銆浜掓枼 銆銆浜掓枼閲忕殑浣滅敤鏄繚璇佹瘡嬈″彧鑳芥湁涓涓嚎紼嬭幏寰椾簰鏂ラ噺鑰屽緱浠ョ戶緇墽琛岋紝浣跨敤CreateMutex鍑芥暟鍒涘緩錛?
HANDLE CreateMutex( 銆LPSECURITY_ATTRIBUTES lpMutexAttributes, 銆// 瀹夊叏灞炴х粨鏋勬寚閽堬紝鍙負(fù)NULL 銆BOOL bInitialOwner, 銆//鏄惁鍗犳湁璇ヤ簰鏂ラ噺錛孴RUE錛氬崰鏈夛紝FALSE錛氫笉鍗犳湁 銆LPCTSTR lpName 銆//淇″彿閲忕殑鍚嶇О );
銆銆Mutex鏄牳蹇冨璞★紝鍙互璺ㄨ繘紼嬭闂紝涓嬮潰鐨勪唬鐮佺粰鍑轟簡浠庡彟涓榪涚▼璁塊棶鍛藉悕Mutex鐨勪緥瀛愶細(xì)
HANDLE hMutex; hMutex = OpenMutex(MUTEX_ALL_Access , FALSE, L"mutexName"); if (hMutex){ 銆鈥? 锝?BR>else{ 銆鈥?BR>}
銆銆鐩稿叧API錛?BR>
BOOL WINAPI ReleaseMutex( 銆HANDLE hMutex );
銆銆浣跨敤浜掓枼緙栫▼鐨勪竴鑸柟娉曟槸錛?BR>
void UpdateResource() { 銆WaitForSingleObject(hMutex,鈥?; 銆...//do something 銆ReleaseMutex(hMutex); }
銆銆浜掓枼(mutex)鍐呮牳瀵硅薄鑳藉紜繚綰跨▼鎷ユ湁瀵瑰崟涓祫婧愮殑浜掓枼璁塊棶鏉冦備簰鏂ュ璞$殑琛屼負(fù)鐗規(guī)т笌涓寸晫鍖虹浉鍚岋紝浣嗘槸浜掓枼瀵硅薄灞炰簬鍐呮牳瀵硅薄錛岃屼復(fù)鐣屽尯鍒欏睘浜庣敤鎴鋒柟寮忓璞★紝鍥犳榪欏鑷磎utex涓嶤ritical Section鐨勫涓嬩笉鍚岋細(xì) 銆銆錛?錛?浜掓枼瀵硅薄鐨勮繍琛岄熷害姣斿叧閿唬鐮佹瑕佹參錛?BR> 銆銆錛?錛?涓嶅悓榪涚▼涓殑澶氫釜綰跨▼鑳藉璁塊棶鍗曚釜浜掓枼瀵硅薄錛?BR> 銆銆錛?錛?綰跨▼鍦ㄧ瓑寰呰闂祫婧愭椂鍙互璁懼畾涓涓秴鏃跺箋?BR> 銆銆涓嬪浘鏇磋緇嗗湴鍒楀嚭浜嗕簰鏂ヤ笌涓寸晫鍖虹殑涓嶅悓錛?BR>
]]> Win32澶氱嚎紼嬬▼搴忚璁′箣綰跨▼閫氫俊 錛堜竴錛?/title> http://m.shnenglu.com/ivenher/articles/2295.html鐖遍キ鐩?/dc:creator>鐖遍キ鐩?/author>Fri, 30 Dec 2005 10:49:00 GMT http://m.shnenglu.com/ivenher/articles/2295.html http://m.shnenglu.com/ivenher/comments/2295.html http://m.shnenglu.com/ivenher/articles/2295.html#Feedback 0 http://m.shnenglu.com/ivenher/comments/commentRss/2295.html http://m.shnenglu.com/ivenher/services/trackbacks/2295.html 綆浠?BR> 銆銆綰跨▼涔嬮棿閫氫俊 鐨勪袱涓熀鏈棶棰樻槸浜掓枼鍜屽悓姝ャ?BR> 銆銆綰跨▼鍚屾鏄寚綰跨▼涔嬮棿鎵鍏鋒湁鐨勪竴縐嶅埗綰﹀叧緋伙紝涓涓嚎紼嬬殑鎵ц渚濊禆鍙︿竴涓嚎紼嬬殑娑堟伅錛屽綋瀹冩病鏈夊緱鍒板彟涓涓嚎紼嬬殑娑堟伅鏃跺簲絳夊緟錛岀洿鍒版秷鎭埌杈炬椂鎵嶈鍞ら啋銆?BR> 銆銆綰跨▼浜掓枼鏄寚瀵逛簬鍏變韓鐨?A target=_blank>鎿嶄綔緋葷粺 璧勬簮錛堟寚鐨勬槸騫夸箟鐨?璧勬簮"錛岃屼笉鏄?A target=_blank>Windows 鐨?res鏂囦歡錛岃濡傚叏灞鍙橀噺灝辨槸涓縐嶅叡浜祫婧愶級錛屽湪鍚勭嚎紼嬭闂椂鐨勬帓瀹冩с傚綋鏈夎嫢騫蹭釜綰跨▼閮借浣跨敤鏌愪竴鍏變韓璧勬簮鏃訛紝浠諱綍鏃跺埢鏈澶氬彧鍏佽涓涓嚎紼嬪幓浣跨敤錛屽叾瀹冭浣跨敤璇ヨ祫婧愮殑綰跨▼蹇呴』絳夊緟錛岀洿鍒板崰鐢ㄨ祫婧愯呴噴鏀捐璧勬簮銆?BR> 銆銆綰跨▼浜掓枼鏄竴縐嶇壒孌婄殑綰跨▼鍚屾銆?BR> 銆銆瀹為檯涓婏紝浜掓枼鍜屽悓姝ュ搴旂潃綰跨▼闂撮氫俊鍙戠敓鐨勪袱縐嶆儏鍐碉細(xì) 銆銆錛?錛夊綋鏈夊涓嚎紼嬭闂叡浜祫婧愯屼笉浣胯祫婧愯鐮村潖鏃訛紱 銆銆錛?錛夊綋涓涓嚎紼嬮渶瑕佸皢鏌愪釜浠誨姟宸茬粡瀹屾垚鐨勬儏鍐甸氱煡鍙﹀涓涓垨澶氫釜綰跨▼鏃躲?BR> 銆銆鍦╓IN32涓紝鍚屾鏈哄埗涓昏鏈変互涓嬪嚑縐嶏細(xì) 銆銆錛?錛変簨浠?Event); 銆銆錛?錛変俊鍙烽噺(semaphore); 銆銆錛?錛変簰鏂ラ噺(mutex); 銆銆錛?錛変復(fù)鐣屽尯(Critical section)銆?BR> 銆銆鍏ㄥ眬鍙橀噺 銆銆鍥犱負(fù)榪涚▼涓殑鎵鏈夌嚎紼嬪潎鍙互璁塊棶鎵鏈夌殑鍏ㄥ眬鍙橀噺錛屽洜鑰屽叏灞鍙橀噺鎴愪負(fù)Win32澶氱嚎紼嬮氫俊鐨勬渶綆鍗曟柟寮忋備緥濡傦細(xì)
int var; //鍏ㄥ眬鍙橀噺 UINT ThreadFunction(LPVOIDpParam) { 銆var = 0; 銆while (var < MaxValue) 銆{ 銆銆//綰跨▼澶勭悊 銆銆::InterlockedIncrement(long*) &var); 銆} 銆return 0; } 璇風(fēng)湅涓嬪垪紼嬪簭錛?BR>int globalFlag = false; DWORD WINAPI ThreadFunc(LPVOID n) { 銆Sleep(2000); 銆globalFlag = true; 銆return 0; } int main() { 銆HANDLE hThrd; 銆DWORD threadId; 銆hThrd = CreateThread(NULL, 0, ThreadFunc, NULL, 0, &threadId); 銆if (hThrd) 銆{ 銆銆printf("Thread launched\n"); 銆銆CloseHandle(hThrd); 銆} 銆while (!globalFlag) 銆; 銆printf("exit\n"); }
銆銆涓婅堪紼嬪簭涓嬌鐢ㄥ叏灞鍙橀噺鍜寃hile寰幆鏌ヨ榪涜綰跨▼闂村悓姝ワ紝瀹為檯涓婏紝榪欐槸涓縐嶅簲璇ラ伩鍏嶇殑鏂規(guī)硶錛屽洜涓猴細(xì) 銆銆錛?錛夊綋涓葷嚎紼嬪繀欏諱嬌鑷繁涓嶵hreadFunc鍑芥暟鐨勫畬鎴愯繍琛屽疄鐜板悓姝ユ椂錛屽畠騫舵病鏈変嬌鑷繁榪涘叆鐫$湢鐘舵併傜敱浜庝富綰跨▼娌℃湁榪涘叆鐫$湢鐘舵侊紝鍥犳鎿嶄綔緋葷粺緇х畫涓哄畠璋冨害C P U鏃墮棿錛岃繖灝辮鍗犵敤鍏朵粬綰跨▼鐨勫疂璐墊椂闂村懆鏈燂紱 銆銆錛?錛夊綋涓葷嚎紼嬬殑浼樺厛綰ч珮浜庢墽琛孴hreadFunc鍑芥暟鐨勭嚎紼嬫椂錛屽氨浼?xì)鍙戠敓globalFlag姘歌繙涓嶈兘琚祴鍊間負(fù)true鐨勬儏鍐點傚洜涓哄湪榪欑鎯呭喌涓嬶紝緋葷粺鍐充笉浼?xì)灏嗕恢M綍鏃墮棿鐗囧垎閰嶇粰ThreadFunc綰跨▼銆?BR> 銆銆浜嬩歡 銆銆浜嬩歡(Event)鏄疻IN32鎻愪緵鐨勬渶鐏墊椿鐨勭嚎紼嬮棿鍚屾鏂瑰紡錛屼簨浠跺彲浠ュ浜庢縺鍙戠姸鎬?signaled or true)鎴栨湭嬋鍙戠姸鎬?unsignal or false)銆傛牴鎹姸鎬佸彉榪佹柟寮忕殑涓嶅悓錛屼簨浠跺彲鍒嗕負(fù)涓ょ被錛?BR> 銆銆錛?錛夋墜鍔ㄨ緗細(xì)榪欑瀵硅薄鍙彲鑳界敤紼嬪簭鎵嬪姩璁劇疆錛屽湪闇瑕佽浜嬩歡鎴栬呬簨浠跺彂鐢熸椂錛岄噰鐢⊿etEvent鍙?qiáng)ResetEvent鏉ヨ繘琛岃緗?BR> 銆銆錛?錛夎嚜鍔ㄦ仮澶嶏細(xì)涓鏃︿簨浠跺彂鐢熷茍琚鐞嗗悗錛岃嚜鍔ㄦ仮澶嶅埌娌℃湁浜嬩歡鐘舵侊紝涓嶉渶瑕佸啀嬈¤緗?BR> 銆銆鍒涘緩浜嬩歡鐨勫嚱鏁板師鍨嬩負(fù)錛?BR>
HANDLE CreateEvent( 銆LPSECURITY_ATTRIBUTES lpEventAttributes, 銆// SECURITY_ATTRIBUTES緇撴瀯鎸囬拡錛屽彲涓篘ULL 銆BOOL bManualReset, 銆// 鎵嬪姩/鑷姩 銆// TRUE錛氬湪WaitForSingleObject鍚庡繀欏繪墜鍔ㄨ皟鐢≧esetEvent娓呴櫎淇″彿 銆// FALSE錛氬湪WaitForSingleObject鍚庯紝緋葷粺鑷姩娓呴櫎浜嬩歡淇″彿 銆BOOL bInitialState, //鍒濆鐘舵?BR>銆LPCTSTR lpName //浜嬩歡鐨勫悕縐?BR>);
銆銆浣跨敤"浜嬩歡"鏈哄埗搴旀敞鎰忎互涓嬩簨欏癸細(xì) 銆銆錛?錛夊鏋滆法榪涚▼璁塊棶浜嬩歡錛屽繀欏誨浜嬩歡鍛藉悕錛屽湪瀵逛簨浠跺懡鍚嶇殑鏃跺欙紝瑕佹敞鎰忎笉瑕佷笌緋葷粺鍛藉悕絀洪棿涓殑鍏跺畠鍏ㄥ眬鍛藉悕瀵硅薄鍐茬獊錛?BR> 銆銆錛?錛変簨浠舵槸鍚﹁鑷姩鎭㈠錛?BR> 銆銆錛?錛変簨浠剁殑鍒濆鐘舵佽緗?BR> 銆銆鐢變簬event瀵硅薄灞炰簬鍐呮牳瀵硅薄錛屾晠榪涚▼B鍙互璋冪敤OpenEvent鍑芥暟閫氳繃瀵硅薄鐨勫悕瀛楄幏寰楄繘紼婣涓璭vent瀵硅薄鐨勫彞鏌勶紝鐒跺悗灝嗚繖涓彞鏌勭敤浜嶳esetEvent銆丼etEvent鍜學(xué)aitForMultipleObjects絳夊嚱鏁頒腑銆傛娉曞彲浠ュ疄鐜頒竴涓繘紼嬬殑綰跨▼鎺у埗鍙︿竴榪涚▼涓嚎紼嬬殑榪愯錛屼緥濡傦細(xì)
HANDLE hEvent=OpenEvent(EVENT_ALL_Access ,true,"MyEvent"); ResetEvent(hEvent);
]]> Windows澶氱嚎紼嬪浠誨姟璁捐鍒濇 http://m.shnenglu.com/ivenher/articles/983.html鐖遍キ鐩?/dc:creator>鐖遍キ鐩?/author>Tue, 08 Nov 2005 11:13:00 GMT http://m.shnenglu.com/ivenher/articles/983.html http://m.shnenglu.com/ivenher/comments/983.html http://m.shnenglu.com/ivenher/articles/983.html#Feedback 0 http://m.shnenglu.com/ivenher/comments/commentRss/983.html http://m.shnenglu.com/ivenher/services/trackbacks/983.html
銆銆 錛誨墠璦錛氾冀褰撳墠嫻佽鐨刉indows鎿嶄綔緋葷粺錛屽畠鑳藉悓鏃惰繍琛屽嚑涓▼搴?鐙珛榪愯鐨勭▼搴忓張縐頒箣涓鴻繘紼?錛屽浜庡悓涓涓▼搴忥紝瀹冨張鍙互鍒嗘垚鑻ュ共涓嫭绔嬬殑鎵ц嫻侊紝鎴戜滑縐頒箣涓虹嚎紼嬶紝綰跨▼鎻愪緵浜嗗浠誨姟澶勭悊鐨勮兘鍔涖傜敤榪涚▼鍜岀嚎紼嬬殑瑙傜偣鏉ョ爺絀惰蔣浠舵槸褰撲粖鏅亶閲囩敤鐨勬柟娉曪紝榪涚▼鍜岀嚎紼嬬殑姒傚康鐨勫嚭鐜幫紝瀵規(guī)彁楂樿蔣浠剁殑騫惰鎬ф湁鐫閲嶈鐨勬剰涔夈傜幇鍦ㄧ殑搴旂敤杞歡鏃犱竴涓嶆槸澶氱嚎紼嬪浠誨姟澶勭悊錛屽崟綰垮煄鐨勮蔣浠舵槸涓嶅彲鎯寵薄鐨勩傚洜姝ゆ帉鎻″綰跨▼澶氫換鍔¤璁℃柟娉曞姣忎釜紼嬪簭鍛橀兘鏄繀闇瑕佹帉鎻$殑銆傛湰鏂囬拡瀵瑰綰跨▼鎶鏈湪搴旂敤涓粡甯擱亣鍒扮殑闂錛屽綰跨▼闂寸殑閫氫俊銆佸悓姝ョ瓑錛屽瀹冧滑鍒嗗埆榪涜鎺㈣銆? 銆銆 涓銆?鐞嗚В綰跨▼ 銆銆 瑕佽瑙g嚎紼嬶紝涓嶅緱涓嶈涓涓嬭繘紼嬶紝榪涚▼鏄簲鐢ㄧ▼搴忕殑鎵ц瀹炰緥錛屾瘡涓繘紼嬫槸鐢辯鏈夌殑铏氭嫙鍦板潃絀洪棿銆佷唬鐮併佹暟鎹拰鍏跺畠緋葷粺璧勬簮緇勬垚銆傝繘紼嬪湪榪愯鏃跺垱寤虹殑璧勬簮闅忕潃榪涚▼鐨勭粓姝㈣屾浜°傜嚎紼嬬殑鍩烘湰鎬濇兂寰堢畝鍗曪紝瀹冩槸涓涓嫭绔嬬殑鎵ц嫻侊紝鏄繘紼嬪唴閮ㄧ殑涓涓嫭绔嬬殑鎵ц鍗曞厓錛岀浉褰撲簬涓涓瓙紼嬪簭錛屽畠瀵瑰簲Visual C++涓殑CwinThread綾葷殑瀵硅薄銆傚崟鐙竴涓墽琛岀▼搴忚繍琛屾椂錛岀己鐪佺殑榪愯鍖呭惈鐨勪竴涓富綰跨▼錛屼富綰跨▼浠ュ嚱鏁板湴鍧鐨勫艦寮忥紝濡俶ain鎴朩inMain鍑芥暟錛屾彁渚涚▼搴忕殑鍚姩鐐癸紝褰撲富綰跨▼緇堟鏃訛紝榪涚▼涔熼殢涔嬬粓姝紝浣嗘牴鎹渶瑕侊紝搴旂敤紼嬪簭鍙堝彲浠ュ垎瑙f垚璁稿鐙珛鎵ц鐨勭嚎紼嬶紝姣忎釜綰跨▼騫惰鐨勮繍琛屽湪鍚屼竴榪涚▼涓? 銆銆 涓涓繘紼嬩腑鐨勬墍鏈夌嚎紼嬮兘鍦ㄨ榪涚▼鐨勮櫄鎷熷湴鍧絀洪棿涓紝浣跨敤璇ヨ繘紼嬬殑鍏ㄥ眬鍙橀噺鍜岀郴緇熻祫婧愩傛搷浣滅郴緇熺粰姣忎釜綰跨▼鍒嗛厤涓嶅悓鐨凜PU鏃墮棿鐗囷紝鍦ㄦ煇涓涓椂鍒伙紝CPU鍙墽琛屼竴涓椂闂寸墖鍐呯殑綰跨▼錛屽涓椂闂寸墖涓殑鐩稿簲綰跨▼鍦–PU鍐呰疆嫻佹墽琛岋紝鐢變簬姣忎釜鏃墮棿鐗囨椂闂村緢鐭紝鎵浠ュ鐢ㄦ埛鏉ヨ錛屼豢浣?jīng)鍚勪釜绾拷E嬪湪璁$畻鏈轟腑鏄茍琛屽鐞嗙殑銆傛搷浣滅郴緇熸槸鏍規(guī)嵁綰跨▼鐨勪紭鍏堢駭鏉ュ畨鎺扖PU鐨勬椂闂達(dá)紝浼樺厛綰ч珮鐨勭嚎紼嬩紭鍏堣繍琛岋紝浼樺厛綰т綆鐨勭嚎紼嬪垯緇х畫絳夊緟銆? 銆銆 綰跨▼琚垎涓轟袱縐嶏細(xì)鐢ㄦ埛鐣岄潰綰跨▼鍜屽伐浣滅嚎紼嬶紙鍙堢О涓哄悗鍙扮嚎紼嬶級銆傜敤鎴風(fēng)晫闈㈢嚎紼嬮氬父鐢ㄦ潵澶勭悊鐢ㄦ埛鐨勮緭鍏ュ茍鍝嶅簲鍚勭浜嬩歡鍜屾秷鎭紝鍏跺疄錛屽簲鐢ㄧ▼搴忕殑涓繪墽琛岀嚎紼婥WinAPP瀵硅薄灝辨槸涓涓敤鎴風(fēng)晫闈㈢嚎紼嬶紝褰撳簲鐢ㄧ▼搴忓惎鍔ㄦ椂鑷姩鍒涘緩鍜屽惎鍔紝鍚屾牱瀹冪殑緇堟涔熸剰鍛崇潃璇ョ▼搴忕殑緇撴潫錛岃繘鍩庣粓姝€傚伐浣滆呯嚎紼嬬敤鏉ユ墽琛岀▼搴忕殑鍚庡彴澶勭悊浠誨姟錛屾瘮濡傝綆椼佽皟搴︺佸涓插彛鐨勮鍐欐搷浣滅瓑錛屽畠鍜岀敤鎴風(fēng)晫闈㈢嚎紼嬬殑鍖哄埆鏄畠涓嶇敤浠嶤winThread綾繪淳鐢熸潵鍒涘緩錛屽瀹冩潵璇存渶閲嶈鐨勬槸濡備綍瀹炵幇宸ヤ綔綰跨▼浠誨姟鐨勮繍琛屾帶鍒跺嚱鏁般傚伐浣滅嚎紼嬪拰鐢ㄦ埛鐣岄潰綰跨▼鍚姩鏃惰璋冪敤鍚屼竴涓嚱鏁扮殑涓嶅悓鐗堟湰錛涙渶鍚庨渶瑕佽鑰呮槑鐧界殑鏄紝涓涓繘紼嬩腑鐨勬墍鏈夌嚎紼嬪叡浜畠浠埗榪涚▼鐨勫彉閲忥紝浣嗗悓鏃舵瘡涓嚎紼嬪彲浠ユ嫢鏈夎嚜宸辯殑鍙橀噺銆? 銆銆 浜屻?綰跨▼鐨勭鐞嗗拰鎿嶄綔 銆銆 1錛?綰跨▼鐨勫惎鍔? 銆銆 鍒涘緩涓涓敤鎴風(fēng)晫闈㈢嚎紼嬶紝棣栧厛瑕佷粠綾籆winThread浜х敓涓涓淳鐢熺被錛屽悓鏃跺繀欏諱嬌鐢―ECLARE_DYNCREATE鍜孖MPLEMENT_DYNCREATE鏉ュ0鏄庡拰瀹炵幇榪欎釜CwinThread媧劇敓綾匯? 銆銆 絎簩姝ユ槸鏍規(guī)嵁闇瑕侀噸杞借媧劇敓綾葷殑涓浜涙垚鍛樺嚱鏁板錛欵xitInstance()錛汭nitInstance()錛汷nIdle();PreTranslateMessage()絳夊嚱鏁幫紝鏈鍚庡惎鍔ㄨ鐢ㄦ埛鐣岄潰綰跨▼錛岃皟鐢ˋfxBeginThread()鍑芥暟鐨勪竴涓増鏈細(xì)CWinThread* AfxBeginThread( CRuntimeClass* pThreadClass, int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0, DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL );鍏朵腑絎竴涓弬鏁頒負(fù)鎸囧悜瀹氫箟鐨勭敤鎴風(fēng)晫闈㈢嚎紼嬬被鎸囬拡鍙橀噺錛岀浜屼釜鍙傛暟涓虹嚎紼嬬殑浼樺厛綰э紝絎笁涓弬鏁頒負(fù)綰跨▼鎵瀵瑰簲鐨勫爢鏍堝ぇ灝忥紝絎洓涓弬鏁頒負(fù)綰跨▼鍒涘緩鏃剁殑闄勫姞鏍囧織錛岀己鐪佷負(fù)姝e父鐘舵侊紝濡備負(fù)CREATE_SUSPENDED鍒欑嚎紼嬪惎鍔ㄥ悗涓烘寕璧風(fēng)姸鎬併? 銆銆 瀵逛簬宸ヤ綔綰跨▼鏉ヨ錛屽惎鍔ㄤ竴涓嚎紼嬶紝棣栧厛闇瑕佺紪鍐欎竴涓笇鏈涗笌搴旂敤紼嬪簭鐨勫叾浣欓儴鍒嗗茍琛岃繍琛岀殑鍑芥暟濡侳un1()錛屾帴鐫瀹氫箟涓涓寚鍚慍winThread瀵硅薄鐨勬寚閽堝彉閲?pThread,璋冪敤AfxBeginThread(Fun1,param,priority)鍑芥暟錛岃繑鍥炲間粯緇檖Thread鍙橀噺鐨勫悓鏃朵竴騫跺惎鍔ㄨ綰跨▼鏉ユ墽琛屼笂闈㈢殑Fun1()鍑芥暟錛屽叾涓璅un1鏄嚎紼嬭榪愯鐨勫嚱鏁扮殑鍚嶅瓧錛屼篃鏃㈡槸涓婇潰鎵璇寸殑鎺у埗鍑芥暟鐨勫悕瀛楋紝param鏄噯澶囦紶閫佺粰綰跨▼鍑芥暟Fun1鐨勪換鎰?2浣嶅鹼紝priority鍒欐槸瀹氫箟璇ョ嚎紼嬬殑浼樺厛綰у埆錛屽畠鏄瀹氫箟鐨勫父鏁幫紝璇昏呭彲鍙傝僊SDN銆? 銆銆 2錛庣嚎紼嬬殑浼樺厛綰? 銆銆 浠ヤ笅鐨凜winThread綾葷殑鎴愬憳鍑芥暟鐢ㄤ簬綰跨▼浼樺厛綰х殑鎿嶄綔錛? int GetThreadPriority(); BOOL SetThradPriority()(int nPriority); 涓婅堪鐨勪簩涓嚱鏁板垎鍒敤鏉ヨ幏鍙栧拰璁劇疆綰跨▼鐨勪紭鍏堢駭錛岃繖閲岀殑浼樺厛綰э紝鏄浉瀵逛簬璇ョ嚎紼嬫墍澶勭殑浼樺厛鏉冨眰嬈¤岃█鐨勶紝澶勪簬鍚屼竴浼樺厛鏉冨眰嬈$殑綰跨▼錛屼紭鍏堢駭楂樼殑綰跨▼鍏堣繍琛岋紱澶勪簬涓嶅悓浼樺厛鏉冨眰嬈′笂鐨勭嚎紼嬶紝璋佺殑浼樺厛鏉冨眰嬈¢珮錛岃皝鍏堣繍琛屻傝嚦浜庝紭鍏堢駭璁劇疆鎵闇鐨勫父鏁幫紝鑷繁鍙傝僊SDN灝卞彲浠ヤ簡錛岃娉ㄦ剰鐨勬槸瑕佹兂璁劇疆綰跨▼鐨勪紭鍏堢駭錛岃繖涓嚎紼嬪湪鍒涘緩鏃跺繀欏誨叿鏈塗HREAD_SET_INFORMATION璁塊棶鏉冮檺銆傚浜庣嚎紼嬬殑浼樺厛鏉冨眰嬈$殑璁劇疆錛孋winThread綾繪病鏈夋彁渚涚浉搴旂殑鍑芥暟錛屼絾鏄彲浠ラ氳繃Win32 SDK鍑芥暟GetPriorityClass()鍜孲etPriorityClass()鏉ュ疄鐜般? 銆銆 3錛庣嚎紼嬬殑鎮(zhèn)寕銆佹仮澶? 銆銆 CwinThread綾諱腑鍖呭惈浜嗗簲鐢ㄧ▼搴忔?zhèn)寕鍜屾仮澶嶅畠鎵鍒涘緩鐨勭嚎紼嬬殑鍑芥暟錛屽叾涓璖uspendThread()鐢ㄦ潵鎮(zhèn)寕綰跨▼錛屾殏鍋滅嚎紼嬬殑鎵ц錛汻esumeThread()鐢ㄦ潵鎭㈠綰跨▼鐨勬墽琛屻傚鏋滀綘瀵逛竴涓嚎紼嬭繛緇嫢騫叉鎵цSuspendThread()錛屽垯闇瑕佽繛緇墽琛岀浉搴旀鐨凴esumeThread()鏉ユ仮澶嶇嚎紼嬬殑榪愯銆? 銆銆 4錛庣粨鏉熺嚎紼? 銆銆 緇堟綰跨▼鏈変笁縐嶉斿緞錛岀嚎紼嬪彲浠ュ湪鑷韓鍐呴儴璋冪敤AfxEndThread()鏉ョ粓姝㈣嚜韜殑榪愯錛涘彲浠ュ湪綰跨▼鐨勫閮ㄨ皟鐢˙OOL TerminateThread( HANDLE hThread, DWORD dwExitCode )鏉ュ己琛岀粓姝竴涓嚎紼嬬殑榪愯錛岀劧鍚庤皟鐢–loseHandle錛堬級鍑芥暟閲婃斁綰跨▼鎵鍗犵敤鐨勫爢鏍堬紱絎笁縐嶆柟娉曟槸鏀瑰彉鍏ㄥ眬鍙橀噺錛屼嬌綰跨▼鐨勬墽琛屽嚱鏁拌繑鍥烇紝鍒欒綰跨▼緇堟銆備笅闈互絎笁縐嶆柟娉曚負(fù)渚嬶紝緇欏嚭閮ㄥ垎浠g爜錛? //////////////////////////////////////////////////////////////// //////CtestView message handlers /////Set to True to end thread Bool bend=FALSE;//瀹氫箟鐨勫叏灞鍙橀噺錛岀敤浜庢帶鍒剁嚎紼嬬殑榪愯 //The Thread Function UINT ThreadFunction(LPVOID pParam)//綰跨▼鍑芥暟 { while(!bend) {Beep(100,100); Sleep(1000); } return 0; } CwinThread *pThread; HWND hWnd; ///////////////////////////////////////////////////////////// Void CtestView::OninitialUpdate() { hWnd=GetSafeHwnd(); pThread=AfxBeginThread(ThradFunction,hWnd);//鍚姩綰跨▼ pThread->m_bAutoDelete=FALSE;//綰跨▼涓烘墜鍔ㄥ垹闄? Cview::OnInitialUpdate(); } //////////////////////////////////////////////////////////////// Void CtestView::OnDestroy() { bend=TRUE;//鏀瑰彉鍙橀噺錛岀嚎紼嬬粨鏉? WaitForSingleObject(pThread->m_hThread,INFINITE);//絳夊緟綰跨▼緇撴潫 delete pThread;//鍒犻櫎綰跨▼ Cview::OnDestroy(); } 銆銆 涓夈?綰跨▼涔嬮棿鐨勯氫俊 銆銆 閫氬父鎯呭喌涓嬶紝涓涓綰х嚎紼嬭涓轟富綰跨▼瀹屾垚鏌愮鐗瑰畾綾誨瀷鐨勪換鍔★紝榪欏氨闅愬惈鐫琛ㄧず鍦ㄤ富綰跨▼鍜屾綰х嚎紼嬩箣闂撮渶瑕佸緩绔嬩竴涓氫俊鐨勯氶亾銆備竴鑸儏鍐典笅錛屾湁涓嬮潰鐨勫嚑縐嶆柟娉曞疄鐜拌繖縐嶉氫俊浠誨姟錛氫嬌鐢ㄥ叏灞鍙橀噺錛堜笂涓鑺傜殑渚嬪瓙鍏跺疄浣跨敤鐨勫氨鏄繖縐嶆柟娉曪級銆佷嬌鐢ㄤ簨浠跺璞°佷嬌鐢ㄦ秷鎭傝繖閲屾垜浠富瑕佷粙緇嶅悗涓ょ鏂規(guī)硶銆? 銆銆 1錛?鍒╃敤鐢ㄦ埛瀹氫箟鐨勬秷鎭氫俊 銆銆 鍦╓indows紼嬪簭璁捐涓紝搴旂敤紼嬪簭鐨勬瘡涓涓嚎紼嬮兘鎷ユ湁鑷繁鐨勬秷鎭槦鍒楋紝鐢氳嚦宸ヤ綔綰跨▼涔熶笉渚嬪錛岃繖鏍蜂竴鏉ワ紝灝變嬌寰楃嚎紼嬩箣闂村埄鐢ㄦ秷鎭潵浼犻掍俊鎭氨鍙樼殑闈炲父綆鍗曘傞鍏堢敤鎴瘋瀹氫箟涓涓敤鎴鋒秷鎭紝濡備笅鎵紺猴細(xì)#define WM_USERMSG WMUSER+100錛涘湪闇瑕佺殑鏃跺欙紝鍦ㄤ竴涓嚎紼嬩腑璋冪敤 錛氾細(xì)PostMessage((HWND)param,WM_USERMSG,0,0) 鎴? CwinThread::PostThradMessage() 鏉ュ悜鍙﹀涓涓嚎紼嬪彂閫佽繖涓秷鎭紝涓婅堪鍑芥暟鐨勫洓涓弬鏁板垎鍒槸娑堟伅灝嗚鍙戦佸埌鐨勭洰鐨勭獥鍙g殑鍙ユ焺銆佽鍙戦佺殑娑堟伅鏍囧織絎︺佹秷鎭殑鍙傛暟WPARAM鍜孡PARAM銆備笅闈㈢殑浠g爜鏄涓婅妭浠g爜鐨勪慨鏀癸紝淇敼鍚庣殑緇撴灉鏄湪綰跨▼緇撴潫鏃舵樉紺轟竴涓璇濇錛屾彁紺虹嚎紼嬬粨鏉燂細(xì) UINT ThreadFunction(LPVOID pParam) { while(!bend) { Beep(100,100); Sleep(1000); } 錛氾細(xì)PostMessage(hWnd,WM_USERMSG,0,0)錛? return 0; } ////////WM_USERMSG娑堟伅鐨勫搷搴斿嚱鏁頒負(fù)OnThreadended(WPARAM wParam,LPARAM lParam) LONG CTestView::OnThreadended(WPARAM wParam,LPARAM lParam) { AfxMessageBox("Thread ended."); Retrun 0; } 涓婇潰鐨勪緥瀛愭槸宸ヤ綔鑰呯嚎紼嬪悜鐢ㄦ埛鐣岄潰綰跨▼鍙戦佹秷鎭紝瀵逛簬宸ヤ綔鑰呯嚎紼嬶紝濡傛灉瀹冪殑璁捐妯″紡涔熸槸娑堟伅椹卞姩鐨勶紝閭d箞璋冪敤鑰呭彲浠ュ悜瀹冨彂閫佸垵濮嬪寲銆侀鍑恒佹墽琛屾煇縐嶇壒瀹氱殑澶勭悊絳夋秷鎭紝璁╁畠鍦ㄥ悗鍙板畬鎴愩傚湪鎺у埗鍑芥暟涓彲浠ョ洿鎺ヤ嬌鐢細(xì)錛欸etMessage()榪欎釜SDK鍑芥暟榪涜娑堟伅鍒嗘鍜屽鐞嗭紝鑷繁瀹炵幇涓涓秷鎭驚鐜侴etMessage()鍑芥暟鍦ㄥ垽鏂綰跨▼鐨勬秷鎭槦鍒椾負(fù)絀烘椂錛岀嚎紼嬪皢緋葷粺鍒嗛厤緇欏畠鐨勬椂闂寸墖璁╃粰鍏跺畠綰跨▼錛屼笉鏃犳晥鐨勫崰鐢–PU鐨勬椂闂達(dá)紝濡傛灉娑堟伅闃熷垪涓嶄負(fù)絀猴紝灝辮幏鍙栬繖涓秷鎭紝鍒ゆ柇榪欎釜娑堟伅鐨勫唴瀹瑰茍榪涜鐩稿簲鐨勫鐞嗐? 銆銆 2錛庣敤浜嬩歡瀵硅薄瀹炵幇閫氫俊 銆銆 鍦ㄧ嚎紼嬩箣闂翠紶閫掍俊鍙瘋繘琛岄氫俊姣旇緝澶嶆潅鐨勬柟娉曟槸浣跨敤浜嬩歡瀵硅薄錛岀敤MFC鐨凜event綾葷殑瀵硅薄鏉ヨ〃紺恒備簨浠跺璞″浜庝袱縐嶇姸鎬佷箣涓錛氭湁淇″彿鍜屾棤淇″彿錛岀嚎紼嬪彲浠ョ洃瑙嗗浜庢湁淇″彿鐘舵佺殑浜嬩歡錛屼互渚垮湪閫傚綋鐨勬椂鍊欐墽琛屽浜嬩歡鐨勬搷浣溿備笂榪頒緥瀛愪唬鐮佷慨鏀瑰涓嬶細(xì) //////////////////////////////////////////////////////////////////// Cevent threadStart,threadEnd; //////////////////////////////////////////////////////////////////// UINT ThreadFunction(LPVOID pParam) { 錛氾細(xì)WaitForSingleObject(threadStart.m_hObject,INFINITE); AfxMessageBox("Thread start."); while(!bend) { Beep(100,100); Sleep(1000); Int result=::WaitforSingleObject(threadEnd.m_hObject,0); //絳夊緟threadEnd浜嬩歡鏈変俊鍙鳳紝鏃犱俊鍙鋒椂綰跨▼鍦ㄨ繖閲屾?zhèn)? If(result==Wait_OBJECT_0) Bend=TRUE; } 錛氾細(xì)PostMessage(hWnd,WM_USERMSG,0,0)錛? return 0; } ///////////////////////////////////////////////////////////// Void CtestView::OninitialUpdate() { hWnd=GetSafeHwnd(); threadStart.SetEvent();//threadStart浜嬩歡鏈変俊鍙? pThread=AfxBeginThread(ThreadFunction,hWnd);//鍚姩綰跨▼ pThread->m_bAutoDelete=FALSE; Cview::OnInitialUpdate(); } //////////////////////////////////////////////////////////////// Void CtestView::OnDestroy() { threadEnd.SetEvent(); WaitForSingleObject(pThread->m_hThread,INFINITE); delete pThread; Cview::OnDestroy(); } 榪愯榪欎釜紼嬪簭錛屽綋鍏抽棴紼嬪簭鏃訛紝鎵嶆樉紺烘彁紺烘錛屾樉紺?Thread ended" 銆銆 鍥涖?綰跨▼涔嬮棿鐨勫悓姝? 銆銆 鍓嶉潰鎴戜滑璁茶繃錛屽悇涓嚎紼嬪彲浠ヨ闂繘紼嬩腑鐨勫叕鍏卞彉閲忥紝鎵浠ヤ嬌鐢ㄥ綰跨▼鐨勮繃紼嬩腑闇瑕佹敞鎰忕殑闂鏄浣曢槻姝袱涓垨涓や釜浠ヤ笂鐨勭嚎紼嬪悓鏃惰闂悓涓涓暟鎹紝浠ュ厤鐮村潖鏁版嵁鐨勫畬鏁存с備繚璇佸悇涓嚎紼嬪彲浠ュ湪涓璧烽傚綋鐨勫崗璋冨伐浣滅О涓虹嚎紼嬩箣闂寸殑鍚屾銆傚墠闈竴鑺備粙緇嶇殑浜嬩歡瀵硅薄瀹為檯涓婂氨鏄竴縐嶅悓姝ュ艦寮忋俈isual C++涓嬌鐢ㄥ悓姝ョ被鏉ヨВ鍐蟲搷浣滅郴緇熺殑騫惰鎬ц屽紩璧風(fēng)殑鏁版嵁涓嶅畨鍏ㄧ殑闂錛孧FC鏀寔鐨勪竷涓綰跨▼鐨勫悓姝ョ被鍙互鍒嗘垚涓ゅぇ綾伙細(xì)鍚屾瀵硅薄錛圕syncObject銆丆semaphore銆丆mutex銆丆criticalSection鍜孋event錛夊拰鍚屾璁塊棶瀵硅薄錛圕multiLock鍜孋singleLock錛夈傛湰鑺備富瑕佷粙緇嶄復(fù)鐣屽尯錛坈ritical section錛夈佷簰鏂ワ紙mutexe錛夈佷俊鍙烽噺錛坰emaphore錛夛紝榪欎簺鍚屾瀵硅薄浣垮悇涓嚎紼嬪崗璋冨伐浣滐紝紼嬪簭榪愯璧鋒潵鏇村畨鍏ㄣ? 銆銆 1錛?涓寸晫鍖? 銆銆 涓寸晫鍖烘槸淇濊瘉鍦ㄦ煇涓涓椂闂村彧鏈変竴涓嚎紼嬪彲浠ヨ闂暟鎹殑鏂規(guī)硶銆備嬌鐢ㄥ畠鐨勮繃紼嬩腑錛岄渶瑕佺粰鍚勪釜綰跨▼鎻愪緵涓涓叡浜殑涓寸晫鍖哄璞★紝鏃犺鍝釜綰跨▼鍗犳湁涓寸晫鍖哄璞★紝閮藉彲浠ヨ闂彈鍒頒繚鎶ょ殑鏁版嵁錛岃繖鏃跺欏叾瀹冪殑綰跨▼闇瑕佺瓑寰咃紝鐩村埌璇ョ嚎紼嬮噴鏀句復(fù)鐣屽尯瀵硅薄涓烘錛屼復(fù)鐣屽尯琚噴鏀懼悗錛屽彟澶栫殑綰跨▼鍙互寮哄崰榪欎釜涓寸晫鍖猴紝浠ヤ究璁塊棶鍏變韓鐨勬暟鎹備復(fù)鐣屽尯瀵瑰簲鐫涓涓狢criticalSection瀵硅薄錛屽綋綰跨▼闇瑕佽闂繚鎶ゆ暟鎹椂錛岃皟鐢ㄤ復(fù)鐣屽尯瀵硅薄鐨凩ock()鎴愬憳鍑芥暟錛涘綋瀵逛繚鎶ゆ暟鎹殑鎿嶄綔瀹屾垚涔嬪悗錛岃皟鐢ㄤ復(fù)鐣屽尯瀵硅薄鐨刄nlock()鎴愬憳鍑芥暟閲婃斁瀵逛復(fù)鐣屽尯瀵硅薄鐨勬嫢鏈夋潈錛屼互浣垮彟涓涓嚎紼嬪彲浠ュず鍙栦復(fù)鐣屽尯瀵硅薄騫惰闂彈淇濇姢鐨勬暟鎹傚悓鏃跺惎鍔ㄤ袱涓嚎紼嬶紝瀹冧滑瀵瑰簲鐨勫嚱鏁板垎鍒負(fù)WriteThread()鍜孯eadThread()錛岀敤浠ュ鍏叡鏁扮粍緇刟rray[]鎿嶄綔錛屼笅闈㈢殑浠g爜璇存槑浜嗗浣曚嬌鐢ㄤ復(fù)鐣屽尯瀵硅薄錛? #include "afxmt.h" int array[10],destarray[10]; CCriticalSection Section; //////////////////////////////////////////////////////////////////////// UINT WriteThread(LPVOID param) {Section.Lock(); for(int x=0;x<10;x++) array[x]=x; Section.Unlock(); } UINT ReadThread(LPVOID param) { Section.Lock(); For(int x=0;x<10;x++) Destarray[x]=array[x]; Section.Unlock(); } 涓婅堪浠g爜榪愯鐨勭粨鏋滃簲璇ユ槸Destarray鏁扮粍涓殑鍏冪礌鍒嗗埆涓?-9錛岃屼笉鏄潅涔辨棤绔犵殑鏁幫紝濡傛灉涓嶄嬌鐢ㄥ悓姝ワ紝鍒欎笉鏄繖涓粨鏋滐紝鏈夊叴瓚g殑璇昏呭彲浠ュ疄楠屼竴涓嬨? 銆銆 2錛?浜掓枼 銆銆 浜掓枼涓庝復(fù)鐣屽尯寰堢浉浼鹼紝浣嗘槸浣跨敤鏃剁浉瀵瑰鏉備竴浜涳紝瀹冧笉浠呭彲浠ュ湪鍚屼竴搴旂敤紼嬪簭鐨勭嚎紼嬮棿瀹炵幇鍚屾錛岃繕鍙互鍦ㄤ笉鍚岀殑榪涚▼闂村疄鐜板悓姝ワ紝浠庤屽疄鐜拌祫婧愮殑瀹夊叏鍏變韓銆備簰鏂ヤ笌Cmutex綾葷殑瀵硅薄鐩稿搴旓紝浣跨敤浜掓枼瀵硅薄鏃訛紝蹇呴』鍒涘緩涓涓狢SingleLock鎴朇MultiLock瀵硅薄錛岀敤浜庡疄闄呯殑璁塊棶鎺у埗錛屽洜涓鴻繖閲岀殑渚嬪瓙鍙鐞嗗崟涓簰鏂ワ紝鎵浠ユ垜浠彲浠ヤ嬌鐢–SingleLock瀵硅薄錛岃瀵硅薄鐨凩ock()鍑芥暟鐢ㄤ簬鍗犳湁浜掓枼錛孶nlock()鐢ㄤ簬閲婃斁浜掓枼銆傚疄鐜頒唬鐮佸涓嬶細(xì) #include "afxmt.h" int array[10],destarray[10]; CMutex Section; ///////////////////////////////////////////////////////////// UINT WriteThread(LPVOID param) { CsingleLock singlelock; singlelock (&Section); singlelock.Lock(); for(int x=0;x<10;x++) array[x]=x; singlelock.Unlock(); } UINT ReadThread(LPVOID param) { CsingleLock singlelock; singlelock (&Section); singlelock.Lock(); For(int x=0;x<10;x++) Destarray[x]=array[x]; singlelock.Unlock(); } 銆銆 3錛?淇″彿閲? 銆銆 淇″彿閲忕殑鐢ㄦ硶鍜屼簰鏂ョ殑鐢ㄦ硶寰堢浉浼鹼紝涓嶅悓鐨勬槸瀹冨彲浠ュ悓涓鏃跺埢鍏佽澶氫釜綰跨▼璁塊棶鍚屼竴涓祫婧愶紝鍒涘緩涓涓俊鍙烽噺闇瑕佺敤Csemaphore綾誨0鏄庝竴涓璞★紝涓鏃﹀垱寤轟簡涓涓俊鍙烽噺瀵硅薄錛屽氨鍙互鐢ㄥ畠鏉ュ璧勬簮鐨勮闂妧鏈傝瀹炵幇璁℃暟澶勭悊錛屽厛鍒涘緩涓涓狢singleLock鎴朇mltiLock瀵硅薄錛岀劧鍚庣敤璇ュ璞$殑Lock()鍑芥暟鍑忓皯榪欎釜淇″彿閲忕殑璁℃暟鍊鹼紝Unlock()鍙嶄箣銆備笅闈㈢殑浠g爜鍒嗗埆鍚姩涓変釜綰跨▼錛屾墽琛屾椂鍚屾椂鏄劇ず浜屼釜娑堟伅妗嗭紝鐒跺悗10縐掑悗絎笁涓秷鎭鎵嶅緱浠ユ樉紺恒? ///////////////////////////////////////////////////////////////// Csemaphore *semaphore; Semaphore=new Csemaphore(2,2); HWND hWnd=GetSafeHwnd(); AfxBeginThread(threadProc1,hWnd); AfxBeginThread(threadProc2,hWnd); AfxBeginThread(threadProc3,hWnd); ////////////////////////////////////////////////////////////////////// UINT ThreadProc1(LPVOID param) {CsingleLock singelLock(semaphore); singleLock.Lock(); Sleep(10000); ::MessageBox((HWND)param,"Thread1 had access","Thread1",MB_OK); return 0; } UINT ThreadProc2(LPVOID param) {CSingleLock singelLock(semaphore); singleLock.Lock(); Sleep(10000); ::MessageBox((HWND)param,"Thread2 had access","Thread2",MB_OK); return 0; } UINT ThreadProc3(LPVOID param) {CsingleLock singelLock(semaphore); singleLock.Lock(); Sleep(10000); ::MessageBox((HWND)param,"Thread3 had access","Thread3",MB_OK); return 0; } 銆銆 瀵瑰鏉傜殑搴旂敤紼嬪簭鏉ヨ錛岀嚎紼嬬殑搴旂敤緇欏簲鐢ㄧ▼搴忔彁渚涗簡楂樻晥銆佸揩閫熴佸畨鍏ㄧ殑鏁版嵁澶勭悊鑳藉姏銆傛湰鏂囪榪頒簡綰跨▼涓粡甯擱亣鍒扮殑闂錛屽笇鏈涘璇昏呮湅鍙嬫湁涓瀹氱殑甯姪銆?/TD>
]]> 青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
一本色道88久久加勒比精品 |
欧美在线视频观看 |
欧美一区二区三区的 |
午夜国产精品影院在线观看 |
亚洲一区二区三区四区五区黄
|
欧美亚洲免费高清在线观看 |
亚洲女女女同性video |
欧美一区二区三区免费在线看 |
欧美一区二区在线免费观看 |
久久久久免费观看 |
欧美激情一区二区三区四区 |
日韩一二三区视频 |
欧美亚洲自偷自偷 |
老司机一区二区三区 |
欧美精品福利 |
国产欧美视频一区二区 |
在线欧美日韩 |
亚洲一区二区欧美日韩 |
免费观看日韩av |
一区二区三区高清视频在线观看 |
欧美亚洲免费在线 |
欧美伦理91i |
精品91在线 |
午夜精品久久久99热福利 |
欧美14一18处毛片 |
亚洲一区二区在线免费观看 |
久久在线播放 |
国产欧美精品一区aⅴ影院 |
亚洲精品自在久久 |
麻豆国产va免费精品高清在线 |
亚洲手机在线 |
欧美一区二区在线免费播放 |
亚洲免费大片 |
久久九九免费视频 |
99国内精品久久 |
卡通动漫国产精品 |
国产日韩一区 |
亚洲欧美日韩一区二区三区在线观看 |
欧美va亚洲va国产综合 |
亚洲欧美激情诱惑 |
国产精品国产三级国产aⅴ无密码
国产精品国产三级国产aⅴ入口
|
国产精品一区毛片 |
日韩视频免费在线 |
欧美成人网在线 |
久久精品青青大伊人av |
国产日韩在线看 |
欧美一二三视频 |
亚洲一区二区免费 |
国产精品嫩草影院一区二区 |
亚洲午夜三级在线 |
一本久久a久久精品亚洲 |
欧美片第一页 |
99re8这里有精品热视频免费 |
欧美大色视频 |
免费不卡欧美自拍视频 |
亚洲国产精品精华液2区45 |
久久人人爽人人爽爽久久 |
亚洲欧美三级伦理 |
国产精品三区www17con |
欧美一级久久 |
羞羞色国产精品 |
国产日韩一区二区三区在线 |
欧美在线观看你懂的 |
午夜在线a亚洲v天堂网2018 |
国产日韩欧美一区二区 |
久久久久国内 |
久久久久久亚洲精品中文字幕
|
国产精品高潮粉嫩av |
亚洲免费网址 |
欧美一级大片在线观看 |
伊人成人在线 |
91久久精品国产91久久性色tv |
欧美一区二区三区视频在线 |
黄色综合网站 |
亚洲欧洲日产国产网站 |
国产精品高潮在线 |
久久婷婷激情 |
欧美日韩国产一级 |
久久国产精品久久精品国产
|
国产午夜精品在线 |
欧美aa在线视频 |
欧美日韩三级视频 |
欧美一区二区三区视频在线观看 |
亚洲精品欧美在线 |
一二三区精品福利视频 |
欧美国产高潮xxxx1819 |
制服丝袜激情欧洲亚洲 |
亚洲女人小视频在线观看 |
亚洲福利视频二区 |
日韩亚洲欧美一区二区三区 |
国产偷国产偷亚洲高清97cao |
男女精品网站 |
国产精品国产福利国产秒拍
|
亚洲一二三区在线 |
在线观看日韩一区 |
一区二区欧美亚洲 |
亚洲高清视频在线 |
亚洲网址在线 |
亚洲黄色在线观看 |
亚洲欧美日韩精品久久久久 |
亚洲精品久久嫩草网站秘色
|
亚洲国产cao |
亚洲特级片在线 |
亚洲黑丝在线 |
欧美一区二区三区的 |
亚洲午夜精品久久 |
乱人伦精品视频在线观看 |
欧美亚洲一区二区在线观看 |
欧美日韩视频在线一区二区观看视频
|
狠狠狠色丁香婷婷综合激情 |
亚洲精品日日夜夜 |
在线观看日韩av先锋影音电影院 |
亚洲男人的天堂在线 |
99精品视频免费全部在线 |
久久久久久久成人 |
久久久久九九九 |
国产日韩精品在线播放 |
一区二区三区精密机械公司
|
狠狠色丁香久久婷婷综合_中 |
亚洲视频一区二区 |
亚洲色图综合久久 |
欧美精品偷拍 |
亚洲激情第一页 |
亚洲片在线观看 |
免费看亚洲片 |
美女视频网站黄色亚洲 |
国产一区二区三区日韩 |
午夜精品久久久久久久久久久 |
亚洲夜晚福利在线观看 |
欧美日韩伊人 |
一二三区精品福利视频 |
亚洲视频一区二区在线观看 |
欧美日韩免费一区 |
一区二区激情小说 |
欧美一级片一区 |
国产日韩欧美日韩 |
欧美在线播放一区二区 |
久久理论片午夜琪琪电影网 |
黄色精品一二区 |
久久久精品tv |
免费成人激情视频 |
亚洲第一毛片 |
欧美成人中文字幕在线 |
亚洲毛片在线观看. |
国产日韩精品在线观看 |
久久激情视频 |
国内精品久久久久久影视8
|
一区二区国产日产 |
欧美成人嫩草网站 |
99re国产精品 |
久久国产精品久久久久久 |
国内精品久久久久影院色 |
两个人的视频www国产精品 |
亚洲电影免费观看高清完整版在线观看
|
欧美日韩国产免费观看 |
日韩午夜电影在线观看 |
午夜精品免费在线 |
国产在线播精品第三 |
免费亚洲婷婷 |
中日韩视频在线观看 |
欧美一区二区三区免费观看视频 |
国产中文一区二区 |
欧美精品首页 |
欧美一区二区免费 |
最近中文字幕日韩精品
|
欧美精品成人在线 |
中文亚洲免费 |
久久综合免费视频影院 |
9人人澡人人爽人人精品 |
国产日韩精品一区观看 |
欧美精品一区二区三区久久久竹菊 |
亚洲婷婷国产精品电影人久久 |
鲁大师成人一区二区三区 |
亚洲视频一区二区在线观看
|
亚洲一区二区三区国产 |
国内综合精品午夜久久资源 |
欧美精品一区三区 |
亚洲综合色网站 |
亚洲国产欧美一区 |
亚洲一区二区黄 |
亚洲精品免费一二三区 |
国产亚洲欧美一区二区三区 |
欧美日韩国产麻豆 |
麻豆久久精品 |
香蕉成人久久 |
一本久久综合亚洲鲁鲁 |
欧美激情精品久久久久久免费印度 |
欧美在线观看一区二区三区 |
av成人激情 |
1000部国产精品成人观看 |
国产精品高潮视频 |
欧美日韩中文字幕在线 |
欧美国产日本 |
欧美成人自拍视频 |
免费视频一区 |
老司机免费视频一区二区三区
|
亚洲性感激情 |
亚洲精品在线看 |
亚洲高清在线观看一区 |
久久理论片午夜琪琪电影网 |