锘??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 GMThttp://m.shnenglu.com/ivenher/articles/15815.htmlhttp://m.shnenglu.com/ivenher/comments/15815.htmlhttp://m.shnenglu.com/ivenher/articles/15815.html#Feedback4http://m.shnenglu.com/ivenher/comments/commentRss/15815.htmlhttp://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;
volatilelong聽global2聽=0;

class聽MyClass
{
public:
聽聽聽聽MyClass()聽:聽m(
0)
聽聽聽聽{
聽聽聽聽聽聽聽聽
++m;
聽聽聽聽}

聽聽聽聽
int聽fun(int聽v)
聽聽聽聽{
聽聽聽聽聽聽聽聽
return聽m+v;聽//-----------9
聽聽聽聽}

聽聽聽聽
voidset(int聽v)
聽聽聽聽{
聽聽聽聽聽聽聽聽m聽
=聽v;聽聽聽//-------------10
聽聽聽聽}
聽聽聽聽
int聽m;
};

MyClass聽global_object;聽
//-------------8

unsigned聽
int聽__stdcall聽thread_fun1(void*param)
{
聽聽聽聽
staticint聽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

聽聽聽聽
return0;
}


unsigned聽
int聽__stdcall聽thread_fun2(void*param)
{
聽聽聽聽
++global1;聽聽聽聽//-------3
聽聽聽聽++global2;聽聽聽聽//-------4
聽聽聽聽InterlockedIncrement(&global1);聽//--------5

聽聽聽聽global_object.
set(1);聽//-----------11
聽聽聽聽return0;
}


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);
聽聽聽聽
聽聽聽聽
return0;
}




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><link>http://m.shnenglu.com/ivenher/articles/15355.html</link><dc:creator>鐖遍キ鐩?/dc:creator><author>鐖遍キ鐩?/author><pubDate>Sat, 18 Nov 2006 06:21:00 GMT</pubDate><guid>http://m.shnenglu.com/ivenher/articles/15355.html</guid><wfw:comment>http://m.shnenglu.com/ivenher/comments/15355.html</wfw:comment><comments>http://m.shnenglu.com/ivenher/articles/15355.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/ivenher/comments/commentRss/15355.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/ivenher/services/trackbacks/15355.html</trackback:ping><description><![CDATA[5.璁劇疆綰跨▼浼樺厛綰?br /><br />銆銆褰撲竴涓嚎紼嬭棣栨鍒涘緩鏃訛紝瀹冪殑浼樺厛綰х瓑鍚屼簬瀹冩墍灞炶繘紼嬬殑浼樺厛綰с傚湪鍗曚釜榪涚▼鍐呭彲浠ラ氳繃璋冪敤SetThreadPriority鍑芥暟鏀瑰彉綰跨▼鐨勭浉瀵逛紭鍏堢駭銆備竴涓嚎紼嬬殑浼樺厛綰ф槸鐩稿浜庡叾鎵灞炶繘紼嬬殑浼樺厛綰ц岃█鐨勩?br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>BOOL SetThreadPriority(HANDLE hThread, int nPriority); </td></tr></tbody></table><br />銆銆鍏朵腑鍙傛暟hThread鏄寚鍚戝緟淇敼浼樺厛綰х嚎紼嬬殑鍙ユ焺錛岀嚎紼嬩笌鍖呭惈瀹冪殑榪涚▼鐨勪紭鍏堢駭鍏崇郴濡備笅錛?br /><br />銆銆銆綰跨▼浼樺厛綰?= 榪涚▼綾誨熀鏈紭鍏堢駭 + 綰跨▼鐩稿浼樺厛綰?br /><br />銆銆榪涚▼綾葷殑鍩烘湰浼樺厛綰у寘鎷細(xì)<br /><br />銆銆錛?錛夊疄鏃訛細(xì)REALTIME_PRIORITY_CLASS錛?br /><br />銆銆錛?錛夐珮錛欻IGH _PRIORITY_CLASS錛?br /><br />銆銆錛?錛夐珮浜庢甯革細(xì)ABOVE_NORMAL_PRIORITY_CLASS錛?br /><br />銆銆錛?錛夋甯革細(xì)NORMAL _PRIORITY_CLASS錛?br /><br />銆銆錛?錛変綆浜庢甯革細(xì)BELOW_ NORMAL _PRIORITY_CLASS錛?br /><br />銆銆錛?錛夌┖闂詫細(xì)IDLE_PRIORITY_CLASS銆?br /><br />銆銆鎴戜滑浠嶹in32浠誨姟綆$悊鍣ㄤ腑鍙互鐩磋鐨勭湅鍒拌繖鍏釜榪涚▼綾諱紭鍏堢駭錛屽涓嬪浘錛?br /><br /><table width="90%" align="center" border="0"><tbody><tr><td><div align="center"><img src="http://dev.yesky.com/imagelist/05/12/7hdedy7210ey.jpg" border="0" /></div></td></tr></tbody></table><br />銆銆綰跨▼鐨勭浉瀵逛紭鍏堢駭鍖呮嫭錛?br /><br />銆銆錛?錛夌┖闂詫細(xì)THREAD_PRIORITY_IDLE錛?br /><br />銆銆錛?錛夋渶浣庣嚎紼嬶細(xì)THREAD_PRIORITY_LOWEST錛?br /><br />銆銆錛?錛変綆浜庢甯哥嚎紼嬶細(xì)THREAD_PRIORITY_BELOW_NORMAL錛?br /><br />銆銆錛?錛夋甯哥嚎紼嬶細(xì)THREAD_PRIORITY_ NORMAL (緙虹渷)錛?br /><br />銆銆錛?錛夐珮浜庢甯哥嚎紼嬶細(xì)THREAD_PRIORITY_ABOVE_NORMAL錛?br /><br />銆銆錛?錛夋渶楂樼嚎紼嬶細(xì)THREAD_PRIORITY_HIGHEST錛?br /><br />銆銆錛?錛夊叧閿椂闂達(dá)細(xì)THREAD_PRIOTITY_CRITICAL銆?br /><br />銆銆涓嬪浘緇欏嚭浜嗚繘紼嬩紭鍏堢駭鍜岀嚎紼嬬浉瀵逛紭鍏堢駭鐨勬槧灝勫叧緋伙細(xì)<br /><br /><table width="90%" align="center" border="0"><tbody><tr><td><div align="center"><img src="http://dev.yesky.com/imagelist/05/12/62v88f956u3z.jpg" border="0" /></div></td></tr></tbody></table><br />銆銆渚嬪錛?br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>HANDLE hCurrentThread = GetCurrentThread();<br />//鑾峰緱璇ョ嚎紼嬪彞鏌?br />SetThreadPriority(hCurrentThread, THREAD_PRIORITY_LOWEST); </td></tr></tbody></table><br />銆銆6.鐫$湢<br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>VOID Sleep(DWORD dwMilliseconds);</td></tr></tbody></table><br />銆銆璇ュ嚱鏁板彲浣跨嚎紼嬫殏鍋滆嚜宸辯殑榪愯錛岀洿鍒癲wMilliseconds姣榪囧幓涓烘銆傚畠鍛婅瘔緋葷粺錛岃嚜韜笉鎯沖湪鏌愪釜鏃墮棿孌靛唴琚皟搴︺?br /><br />銆銆7.鍏跺畠閲嶈API<br /><br />銆銆鑾峰緱綰跨▼浼樺厛綰?br /><br />銆銆涓涓嚎紼嬭鍒涘緩鏃訛紝灝變細(xì)鏈変竴涓粯璁ょ殑浼樺厛綰э紝浣嗘槸鏈夋椂瑕佸姩鎬佸湴鏀瑰彉涓涓嚎紼嬬殑浼樺厛綰э紝鏈夋椂闇鑾峰緱涓涓嚎紼嬬殑浼樺厛綰с?br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>Int GetThreadPriority (HANDLE hThread);</td></tr></tbody></table><br />銆銆濡傛灉鍑芥暟鎵ц鍙戠敓閿欒錛屼細(xì)榪斿洖THREAD_PRIORITY_ERROR_RETURN鏍囧織銆傚鏋滃嚱鏁版垚鍔熷湴鎵ц錛屼細(xì)榪斿洖浼樺厛綰ф爣蹇椼?br /><br />銆銆鑾峰緱綰跨▼閫鍑虹爜<br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>BOOL WINAPI GetExitCodeThread(<br />銆HANDLE hThread,<br />銆LPDWORD lpExitCode<br />);</td></tr></tbody></table><br />銆銆濡傛灉鎵ц鎴愬姛錛孏etExitCodeThread榪斿洖TRUE錛岄鍑虹爜琚玪pExitCode鎸囧悜鍐呭瓨璁板綍錛涘惁鍒欒繑鍥濬ALSE錛屾垜浠彲閫氳繃GetLastError()鑾風(fēng)煡閿欒鍘熷洜銆傚鏋滅嚎紼嬪皻鏈粨鏉燂紝lpExitCode甯﹀洖鏉ョ殑灝嗘槸STILL_ALIVE銆?br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>鑾峰緱/璁劇疆綰跨▼涓婁笅鏂?br />BOOL WINAPI GetThreadContext(<br />銆HANDLE hThread,<br />銆LPCONTEXT lpContext<br />);<br />BOOL WINAPI SetThreadContext(<br />銆HANDLE hThread,<br />銆CONST CONTEXT *lpContext<br />);</td></tr></tbody></table><br />銆銆鐢變簬GetThreadContext鍜孲etThreadContext鍙互鎿嶄綔CPU鍐呴儴鐨勫瘎瀛樺櫒錛屽洜姝ゅ湪涓浜涢珮綰ф妧宸х殑緙栫▼涓湁涓瀹氬簲鐢ㄣ傝濡傦紝璋冭瘯鍣ㄥ彲鍒╃敤GetThreadContext鎸傝搗琚皟璇曠嚎紼嬭幏鍙栧叾涓婁笅鏂囷紝騫惰緗笂涓嬫枃涓殑鏍囧織瀵勫瓨鍣ㄤ腑鐨勯櫡闃辨爣蹇椾綅錛屾渶鍚庨氳繃SetThreadContext浣胯緗敓鏁堟潵榪涜鍗曟璋冭瘯銆?br /><br />銆銆8.瀹炰緥<br /><br />銆銆浠ヤ笅紼嬪簭浣跨敤CreateThread鍒涘緩涓や釜綰跨▼錛屽湪榪欎袱涓嚎紼嬩腑Sleep涓孌墊椂闂達(dá)紝涓葷嚎紼嬮氳繃GetExitCodeThread鏉ュ垽鏂袱涓嚎紼嬫槸鍚︾粨鏉熻繍琛岋細(xì)<br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>#define WIN32_LEAN_AND_MEAN<br />#include <stdio.h><br />#include <stdlib.h><br />#include <windows.h><br />#include <conio.h><br /><br />DWORD WINAPI ThreadFunc(LPVOID);<br /><br />int main()<br />{<br />銆HANDLE hThrd1;<br />銆HANDLE hThrd2;<br />銆DWORD exitCode1 = 0;<br />銆DWORD exitCode2 = 0;<br />銆DWORD threadId;<br /><br />銆hThrd1 = CreateThread(NULL, 0, ThreadFunc, (LPVOID)1, 0, &threadId );<br />銆if (hThrd1)<br />銆銆printf("Thread 1 launched\n");<br /><br />銆hThrd2 = CreateThread(NULL, 0, ThreadFunc, (LPVOID)2, 0, &threadId );<br />銆if (hThrd2)<br />銆銆printf("Thread 2 launched\n");<br /><br />銆// Keep waiting until both calls to GetExitCodeThread succeed AND<br />銆// neither of them returns STILL_ACTIVE.<br />銆for (;;)<br />銆{<br />銆銆printf("Press any key to exit..\n");<br />銆銆getch();<br /><br />銆銆GetExitCodeThread(hThrd1, &exitCode1);<br />銆銆GetExitCodeThread(hThrd2, &exitCode2);<br />銆銆if ( exitCode1 == STILL_ACTIVE )<br />銆銆銆puts("Thread 1 is still running!");<br />銆銆if ( exitCode2 == STILL_ACTIVE )<br />銆銆銆puts("Thread 2 is still running!");<br />銆銆if ( exitCode1 != STILL_ACTIVE && exitCode2 != STILL_ACTIVE )<br />銆銆銆break;<br />銆}<br /><br />銆CloseHandle(hThrd1);<br />銆CloseHandle(hThrd2);<br /><br />銆printf("Thread 1 returned %d\n", exitCode1);<br />銆printf("Thread 2 returned %d\n", exitCode2);<br /><br />銆return EXIT_SUCCESS;<br />}<br /><br />/*<br />* Take the startup value, do some simple math on it,<br />* and return the calculated value.<br />*/<br />DWORD WINAPI ThreadFunc(LPVOID n)<br />{<br />銆Sleep((DWORD)n*1000*2);<br />銆return (DWORD)n * 10;<br />}</td></tr></tbody></table><br />銆銆閫氳繃涓嬮潰鐨勭▼搴忔垜浠彲浠ョ湅鍑哄綰跨▼紼嬪簭榪愯欏哄簭鐨勯毦浠ラ鏂欎互鍙?qiáng)WINAPI鐨凜reateThread鍑芥暟涓嶤榪愯鏃跺簱鐨刜beginthread鐨勫樊鍒細(xì)<br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>#define WIN32_LEAN_AND_MEAN<br />#include <stdio.h><br />#include <stdlib.h><br />#include <windows.h><br /><br />DWORD WINAPI ThreadFunc(LPVOID);<br /><br />int main()<br />{<br />銆HANDLE hThrd;<br />銆DWORD threadId;<br />銆int i;<br /><br />銆for (i = 0; i < 5; i++)<br />銆{<br />銆銆hThrd = CreateThread(NULL, 0, ThreadFunc, (LPVOID)i, 0, &threadId);<br />銆銆if (hThrd)<br />銆銆{<br />銆銆銆printf("Thread launched %d\n", i);<br />銆銆銆CloseHandle(hThrd);<br />銆銆}<br />銆}<br />銆// Wait for the threads to complete.<br />銆Sleep(2000);<br /><br />銆return EXIT_SUCCESS;<br />}<br /><br />DWORD WINAPI ThreadFunc(LPVOID n)<br />{<br />銆int i;<br />銆for (i = 0; i < 10; i++)<br />銆銆printf("%d%d%d%d%d%d%d%d\n", n, n, n, n, n, n, n, n);<br />銆return 0;<br />}</td></tr></tbody></table><br />銆銆榪愯鐨勮緭鍑哄叿鏈夊緢澶х殑闅忔満鎬э紝榪欓噷鎽樺彇浜嗗嚑嬈$粨鏋滅殑涓閮ㄥ垎錛堝嚑涔庢瘡涓嬈¢兘涓嶅悓錛夛細(xì)<br /><br /><table width="90%" align="center" border="0"><tbody><tr><td><div align="center"><img src="http://dev.yesky.com/imagelist/05/12/2269bdvd5va1.jpg" border="0" /><img src="http://dev.yesky.com/imagelist/05/12/94hfp586n83a.jpg" border="0" /><img src="http://dev.yesky.com/imagelist/05/12/phqe9k2g8p2f.jpg" border="0" /></div></td></tr></tbody></table><br />銆銆濡傛灉鎴戜滑浣跨敤鏍囧噯C搴撳嚱鏁拌屼笉鏄綰跨▼鐗堢殑榪愯鏃跺簱錛屽垯紼嬪簭鍙兘杈撳嚭"3333444444"榪欐牱鐨勭粨鏋滐紝鑰屼嬌鐢ㄥ綰跨▼榪愯鏃跺簱鍚庯紝鍒欏彲閬垮厤榪欎竴闂銆?br /><br />銆銆涓嬪垪紼嬪簭鍦ㄤ富綰跨▼涓垱寤轟竴涓猄econdThread錛屽湪SecondThread綰跨▼涓氳繃鑷瀵笴ounter璁℃暟鍒?000000錛屼富綰跨▼涓鐩寸瓑寰呭叾緇撴潫錛?br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>#include <Win32.h><br />#include <stdio.h><br />#include <process.h><br /><br />unsigned Counter;<br />unsigned __stdcall SecondThreadFunc(void *pArguments)<br />{<br />銆printf("In second thread...\n");<br /><br />銆while (Counter < 1000000)<br />銆銆Counter++;<br /><br />銆_endthreadex(0);<br />銆return 0;<br />}<br /><br />int main()<br />{<br />銆HANDLE hThread;<br />銆unsigned threadID;<br /><br />銆printf("Creating second thread...\n");<br /><br />銆// Create the second thread.<br />銆hThread = (HANDLE)_beginthreadex(NULL, 0, &SecondThreadFunc, NULL, 0, &threadID);<br /><br />銆// Wait until second thread terminates <br />銆WaitForSingleObject(hThread, INFINITE);<br />銆printf("Counter should be 1000000; it is-> %d\n", Counter);<br />銆// Destroy the thread object.<br />銆CloseHandle(hThread);<br />}<br /></td></tr></tbody></table><div id="hvzpftn" class="right">聽</div><img src ="http://m.shnenglu.com/ivenher/aggbug/15355.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/ivenher/" target="_blank">鐖遍キ鐩?/a> 2006-11-18 14:21 <a href="http://m.shnenglu.com/ivenher/articles/15355.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>娣卞叆嫻呭嚭Win32澶氱嚎紼嬬▼搴忚璁′箣綰跨▼鎺у埗 涓http://m.shnenglu.com/ivenher/articles/15353.html鐖遍キ鐩?/dc:creator>鐖遍キ鐩?/author>Sat, 18 Nov 2006 06:20:00 GMThttp://m.shnenglu.com/ivenher/articles/15353.htmlhttp://m.shnenglu.com/ivenher/comments/15353.htmlhttp://m.shnenglu.com/ivenher/articles/15353.html#Feedback0http://m.shnenglu.com/ivenher/comments/commentRss/15353.htmlhttp://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><link>http://m.shnenglu.com/ivenher/articles/15354.html</link><dc:creator>鐖遍キ鐩?/dc:creator><author>鐖遍キ鐩?/author><pubDate>Sat, 18 Nov 2006 06:20:00 GMT</pubDate><guid>http://m.shnenglu.com/ivenher/articles/15354.html</guid><wfw:comment>http://m.shnenglu.com/ivenher/comments/15354.html</wfw:comment><comments>http://m.shnenglu.com/ivenher/articles/15354.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/ivenher/comments/commentRss/15354.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/ivenher/services/trackbacks/15354.html</trackback:ping><description><![CDATA[2.鍒涘緩綰跨▼<br /><br />銆銆榪涚▼鐨勪富綰跨▼鐢辨搷浣滅郴緇熻嚜鍔ㄧ敓鎴愶紝W(xué)in32鎻愪緵浜咰reateThread API鏉ュ畬鎴愮敤鎴風(fēng)嚎紼嬬殑鍒涘緩錛岃API鐨勫師鍨嬩負(fù)錛?br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>HANDLE CreateThread(<br />銆LPSECURITY_ATTRIBUTES lpThreadAttributes,//Pointer to a SECURITY_ATTRIBUTES structure<br />銆SIZE_T dwStackSize, //Initial size of the stack, in bytes.<br />銆LPTHREAD_START_ROUTINE lpStartAddress,<br />銆LPVOID lpParameter, //Pointer to a variable to be passed to the thread<br />銆DWORD dwCreationFlags, //Flags that control the creation of the thread<br />銆LPDWORD lpThreadId //Pointer to a variable that receives the thread identifier<br />);</td></tr></tbody></table><br />銆銆濡傛灉浣跨敤C/C++璇█緙栧啓澶氱嚎紼嬪簲鐢ㄧ▼搴忥紝涓瀹氫笉鑳戒嬌鐢ㄦ搷浣滅郴緇熸彁渚涚殑CreateThread API錛岃屽簲璇ヤ嬌鐢–/C++榪愯鏃跺簱涓殑_beginthread錛堟垨_beginthreadex錛夛紝鍏跺嚱鏁板師鍨嬩負(fù)錛?br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>uintptr_t _beginthread( <br />銆void( __cdecl *start_address )( void * ), //Start address of routine that begins execution of new thread<br />銆unsigned stack_size, //Stack size for new thread or 0.<br />銆void *arglist //Argument list to be passed to new thread or NULL<br />);<br />uintptr_t _beginthreadex( <br />銆void *security,//Pointer to a SECURITY_ATTRIBUTES structure<br />銆unsigned stack_size,<br />銆unsigned ( __stdcall *start_address )( void * ),<br />銆void *arglist,<br />銆unsigned initflag,//Initial state of new thread (0 for running or CREATE_SUSPENDED for suspended); <br />銆unsigned *thrdaddr <br />);</td></tr></tbody></table><br />銆銆_beginthread鍑芥暟涓嶹in32 API 涓殑CreateThread鍑芥暟綾諱技錛屼絾鏈夊涓嬪樊寮傦細(xì) <br /><br />銆銆錛?錛夐氳繃_beginthread鍑芥暟鎴戜滑鍙互鍒╃敤鍏跺弬鏁板垪琛╝rglist灝嗗涓弬鏁頒紶閫掑埌綰跨▼錛?<br /><br />銆銆錛?錛塤beginthread 鍑芥暟鍒濆鍖栨煇浜?C 榪愯鏃跺簱鍙橀噺錛屽湪綰跨▼涓嫢闇瑕佷嬌鐢?C 榪愯鏃跺簱銆?<br /><br />銆銆3.緇堟綰跨▼<br /><br />銆銆綰跨▼鐨勭粓姝㈡湁濡備笅鍥涚鏂瑰紡錛?br /><br />銆銆錛?錛夌嚎紼嬪嚱鏁拌繑鍥烇紱<br /><br />銆銆錛?錛夌嚎紼嬭嚜韜皟鐢‥xitThread 鍑芥暟鍗崇粓姝㈣嚜宸憋紝鍏跺師鍨嬩負(fù)錛?br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>VOID ExitThread(UINT fuExitCode ); </td></tr></tbody></table><br />銆銆瀹冨皢鍙傛暟fuExitCode璁劇疆涓虹嚎紼嬬殑閫鍑虹爜銆?br /><br />銆銆娉ㄦ剰錛氬鏋滀嬌鐢–/C++緙栧啓浠g爜錛屾垜浠簲璇ヤ嬌鐢–/C++榪愯鏃跺簱鍑芥暟_endthread (_endthreadex)緇堟綰跨▼錛屽喅涓嶈兘浣跨敤ExitThread錛?br />_endthread 鍑芥暟瀵逛簬綰跨▼鍐呯殑鏉′歡緇堟寰堟湁鐢ㄣ備緥濡傦紝涓撻棬鐢ㄤ簬閫氫俊澶勭悊鐨勭嚎紼嬭嫢鏃犳硶鑾峰彇瀵歸氫俊绔彛鐨勬帶鍒訛紝鍒欎細(xì)閫鍑恒?br /><br />銆銆錛?錛夊悓涓榪涚▼鎴栧叾浠栬繘紼嬬殑綰跨▼璋冪敤TerminateThread鍑芥暟錛屽叾鍘熷瀷涓猴細(xì)<br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>BOOL TerminateThread(HANDLE hThread,DWORD dwExitCode); </td></tr></tbody></table><br />銆銆璇ュ嚱鏁扮敤鏉ョ粨鏉熺敱hThread鍙傛暟鎸囧畾鐨勭嚎紼嬶紝騫舵妸dwExitCode璁炬垚璇ョ嚎紼嬬殑閫鍑虹爜銆傚綋鏌愪釜綰跨▼涓嶅啀鍝嶅簲鏃訛紝鎴戜滑鍙互鐢ㄥ叾浠栫嚎紼嬭皟鐢ㄨ鍑芥暟鏉ョ粓姝㈣繖涓笉鍝嶅簲鐨勭嚎紼嬨?br /><br />銆銆錛?錛夊寘鍚嚎紼嬬殑榪涚▼緇堟銆?br /><br />銆銆鏈濂戒嬌鐢ㄧ1縐嶆柟寮忕粓姝㈢嚎紼嬶紝絎?~4縐嶆柟寮忛兘涓嶅疁閲囩敤銆?br /><br />銆銆4.鎸傝搗涓庢仮澶嶇嚎紼?br /><br />銆銆褰撴垜浠垱寤虹嚎紼嬬殑鏃跺欙紝濡傛灉緇欏叾浼犲叆CREATE_SUSPENDED鏍囧織錛屽垯璇ョ嚎紼嬪垱寤哄悗琚寕璧鳳紝鎴戜滑搴斾嬌鐢≧esumeThread鎭㈠瀹冿細(xì)<br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>DWORD ResumeThread(HANDLE hThread); </td></tr></tbody></table><br />銆銆濡傛灉ResumeThread鍑芥暟榪愯鎴愬姛錛屽畠?yōu)畣杩斿洖绾拷E嬬殑鍓嶄竴涓殏鍋滆鏁幫紝鍚﹀垯榪斿洖0x FFFFFFFF銆?br /><br />銆銆瀵逛簬娌℃湁琚寕璧風(fēng)殑綰跨▼錛岀▼搴忓憳鍙互璋冪敤SuspendThread鍑芥暟寮鴻鎸傝搗涔嬶細(xì)<br /><br /><table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1"><tbody><tr><td>DWORD SuspendThread(HANDLE hThread);</td></tr></tbody></table><br />銆銆涓涓嚎紼嬪彲浠ヨ鎸傝搗澶氭銆傜嚎紼嬪彲浠ヨ嚜琛屾殏鍋滆繍琛岋紝浣嗘槸涓嶈兘鑷鎭㈠榪愯銆傚鏋滀竴涓嚎紼嬭鎸傝搗n嬈★紝鍒欒綰跨▼涔熷繀欏昏鎭㈠n嬈℃墠鍙兘寰椾互鎵ц銆?br /><img src ="http://m.shnenglu.com/ivenher/aggbug/15354.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/ivenher/" target="_blank">鐖遍キ鐩?/a> 2006-11-18 14:20 <a href="http://m.shnenglu.com/ivenher/articles/15354.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Win32澶氱嚎紼嬬▼搴忚璁′箣綰跨▼閫氫俊 錛堜笁錛?/title><link>http://m.shnenglu.com/ivenher/articles/2297.html</link><dc:creator>鐖遍キ鐩?/dc:creator><author>鐖遍キ鐩?/author><pubDate>Fri, 30 Dec 2005 10:51:00 GMT</pubDate><guid>http://m.shnenglu.com/ivenher/articles/2297.html</guid><wfw:comment>http://m.shnenglu.com/ivenher/comments/2297.html</wfw:comment><comments>http://m.shnenglu.com/ivenher/articles/2297.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://m.shnenglu.com/ivenher/comments/commentRss/2297.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/ivenher/services/trackbacks/2297.html</trackback:ping><description><![CDATA[<STRONG>淇″彿閲?BR><BR></STRONG>銆銆淇″彿閲忔槸緇存姢0鍒版寚瀹氭渶澶у間箣闂寸殑鍚屾瀵硅薄銆備俊鍙烽噺鐘舵佸湪鍏惰鏁板ぇ浜?鏃舵槸鏈変俊鍙風(fēng)殑錛岃屽叾璁℃暟鏄?鏃舵槸鏃犱俊鍙風(fēng)殑銆備俊鍙烽噺瀵硅薄鍦ㄦ帶鍒朵笂鍙互鏀寔鏈夐檺鏁伴噺鍏變韓璧勬簮鐨勮闂?BR><BR>銆銆淇″彿閲忕殑鐗圭偣鍜岀敤閫斿彲鐢ㄤ笅鍒楀嚑鍙ヨ瘽瀹氫箟錛?BR><BR>銆銆錛?錛夊鏋滃綋鍓嶈祫婧愮殑鏁伴噺澶т簬0錛屽垯淇″彿閲忔湁鏁堬紱<BR><BR>銆銆錛?錛夊鏋滃綋鍓嶈祫婧愭暟閲忔槸0錛屽垯淇″彿閲忔棤鏁堬紱<BR><BR>銆銆錛?錛夌郴緇熷喅涓嶅厑璁稿綋鍓嶈祫婧愮殑鏁伴噺涓鴻礋鍊鹼紱<BR><BR>銆銆錛?錛夊綋鍓嶈祫婧愭暟閲忓喅涓嶈兘澶т簬鏈澶ц祫婧愭暟閲忋?BR><BR>銆銆鍒涘緩淇″彿閲?BR><BR> <TABLE class=txcode cellSpacing=0 cellPadding=0 align=center border=0> <TBODY> <TR> <TD>HANDLE CreateSemaphore (<BR>銆PSECURITY_ATTRIBUTE psa,<BR>銆LONG lInitialCount, //寮濮嬫椂鍙緵浣跨敤鐨勮祫婧愭暟<BR>銆LONG lMaximumCount, //鏈澶ц祫婧愭暟<BR>PCTSTR pszName);</TD></TR></TBODY></TABLE><BR>銆銆閲婃斁淇″彿閲?BR><BR>銆銆閫氳繃璋冪敤ReleaseSemaphore鍑芥暟錛岀嚎紼嬪氨鑳藉瀵逛俊鏍囩殑褰撳墠璧勬簮鏁伴噺榪涜閫掑錛岃鍑芥暟鍘熷瀷涓猴細(xì)<BR><BR> <TABLE class=txcode cellSpacing=0 cellPadding=0 align=center border=0> <TBODY> <TR> <TD>BOOL WINAPI ReleaseSemaphore(<BR>銆HANDLE hSemaphore,<BR>銆LONG lReleaseCount, //淇″彿閲忕殑褰撳墠璧勬簮鏁板鍔爈ReleaseCount<BR>銆LPLONG lpPreviousCount<BR>);</TD></TR></TBODY></TABLE><BR>銆銆鎵撳紑淇″彿閲?BR><BR>銆銆鍜屽叾浠栨牳蹇冨璞′竴鏍鳳紝淇″彿閲忎篃鍙互閫氳繃鍚嶅瓧璺ㄨ繘紼嬭闂紝鎵撳紑淇″彿閲忕殑API涓猴細(xì)<BR><BR> <TABLE class=txcode cellSpacing=0 cellPadding=0 align=center border=0> <TBODY> <TR> <TD>HANDLE OpenSemaphore (<BR>銆DWORD fdw<A target=_blank><FONT color=#3366cc>Access</FONT></A>,<BR>銆BOOL bInherithandle,<BR>銆PCTSTR pszName<BR>);</TD></TR></TBODY></TABLE><BR>銆銆<B>浜掗攣璁塊棶</B><BR><BR>銆銆褰撳繀欏諱互鍘熷瓙鎿嶄綔鏂瑰紡鏉ヤ慨鏀瑰崟涓兼椂錛屼簰閿佽闂嚱鏁版槸鐩稿綋鏈夌敤鐨勩傛墍璋撳師瀛愯闂紝鏄寚綰跨▼鍦ㄨ闂祫婧愭椂鑳藉紜繚鎵鏈夊叾浠栫嚎紼嬮兘涓嶅湪鍚屼竴鏃墮棿鍐呰闂浉鍚岀殑璧勬簮銆?BR><BR>銆銆璇風(fēng)湅涓嬪垪浠g爜錛?BR><BR> <TABLE class=txcode cellSpacing=0 cellPadding=0 align=center border=0> <TBODY> <TR> <TD>int globalVar = 0;<BR><BR>DWORD WINAPI ThreadFunc1(LPVOID n)<BR>{<BR>銆globalVar++;<BR>銆return 0;<BR>}<BR>DWORD WINAPI ThreadFunc2(LPVOID n)<BR>{<BR>銆globalVar++;<BR>銆return 0;<BR>}</TD></TR></TBODY></TABLE><BR>銆銆榪愯ThreadFunc1鍜孴hreadFunc2綰跨▼錛岀粨鏋滄槸涓嶅彲棰勬枡鐨勶紝鍥犱負(fù)globalVar++騫朵笉瀵瑰簲鐫涓鏉℃満鍣ㄦ寚浠わ紝鎴戜滑鐪嬬湅globalVar++鐨勫弽<A target=_blank><FONT color=#3366cc>姹囩紪</FONT></A>浠g爜錛?BR><BR> <TABLE class=txcode cellSpacing=0 cellPadding=0 align=center border=0> <TBODY> <TR> <TD>00401038 mov eax,[globalVar (0042d3f0)]<BR>0040103D add eax,1<BR>00401040 mov [globalVar (0042d3f0)],eax</TD></TR></TBODY></TABLE><BR>銆銆鍦?mov eax,[globalVar (0042d3f0)]" 鎸囦護(hù)涓?add eax,1" 鎸囦護(hù)浠ュ強(qiáng)"add eax,1" 鎸囦護(hù)涓?mov [globalVar (0042d3f0)],eax"鎸囦護(hù)涔嬮棿閮藉彲鑳藉彂鐢熺嚎紼嬪垏鎹紝浣垮緱紼嬪簭鐨勬墽琛屽悗globalVar鐨勭粨鏋滀笉鑳界‘瀹氥傛垜浠彲浠ヤ嬌鐢↖nterlocked<A target=_blank><FONT color=#3366cc>Exchange</FONT></A>Add鍑芥暟瑙e喅榪欎釜闂錛?BR><BR> <TABLE class=txcode cellSpacing=0 cellPadding=0 align=center border=0> <TBODY> <TR> <TD>int globalVar = 0;<BR><BR>DWORD WINAPI ThreadFunc1(LPVOID n)<BR>{<BR>銆InterlockedExchangeAdd(&globalVar,1);<BR>銆return 0;<BR>}<BR>DWORD WINAPI ThreadFunc2(LPVOID n)<BR>{<BR>銆InterlockedExchangeAdd(&globalVar,1);<BR>銆return 0;<BR>}</TD></TR></TBODY></TABLE><BR>銆銆InterlockedExchangeAdd淇濊瘉瀵瑰彉閲廹lobalVar鐨勮闂叿鏈?鍘熷瓙鎬?銆備簰閿佽闂殑鎺у埗閫熷害闈炲父蹇紝璋冪敤涓涓簰閿佸嚱鏁扮殑CPU鍛ㄦ湡閫氬父灝忎簬50錛屼笉闇瑕佽繘琛岀敤鎴鋒柟寮忎笌鍐呮牳鏂瑰紡鐨勫垏鎹紙璇ュ垏鎹㈤氬父闇瑕佽繍琛?000涓狢PU鍛ㄦ湡錛夈?BR><BR>銆銆浜掗攣璁塊棶鍑芥暟鐨勭己鐐瑰湪浜庡叾鍙兘瀵瑰崟涓鍙橀噺榪涜鍘熷瓙璁塊棶錛屽鏋滆璁塊棶鐨勮祫婧愭瘮杈冨鏉傦紝浠嶈浣跨敤涓寸晫鍖烘垨浜掓枼銆?BR><BR>銆銆鍙瓑寰呭畾鏃跺櫒<BR><BR>銆銆鍙瓑寰呭畾鏃跺櫒鏄湪鏌愪釜鏃墮棿鎴栨寜瑙勫畾鐨勯棿闅旀椂闂村彂鍑鴻嚜宸辯殑淇″彿閫氱煡鐨勫唴鏍稿璞°傚畠浠氬父鐢ㄦ潵鍦ㄦ煇涓椂闂存墽琛屾煇涓搷浣溿?BR><BR>銆銆鍒涘緩鍙瓑寰呭畾鏃跺櫒<BR><BR> <TABLE class=txcode cellSpacing=0 cellPadding=0 align=center border=0> <TBODY> <TR> <TD>HANDLE CreateWaitableTimer(<BR>銆PSECURITY_ATTRISUTES psa,<BR>銆BOOL fManualReset,//浜哄伐閲嶇疆鎴栬嚜鍔ㄩ噸緗畾鏃跺櫒<BR>PCTSTR pszName);</TD></TR></TBODY></TABLE><BR>銆銆璁劇疆鍙瓑寰呭畾鏃跺櫒<BR><BR>銆銆鍙瓑寰呭畾鏃跺櫒瀵硅薄鍦ㄩ潪嬋媧葷姸鎬佷笅琚垱寤猴紝紼嬪簭鍛樺簲璋冪敤 SetWaitableTimer鍑芥暟鏉ョ晫瀹氬畾鏃跺櫒鍦ㄤ綍鏃惰嬋媧伙細(xì)<BR><BR> <TABLE class=txcode cellSpacing=0 cellPadding=0 align=center border=0> <TBODY> <TR> <TD>BOOL SetWaitableTimer(<BR>銆HANDLE hTimer, //瑕佽緗殑瀹氭椂鍣?BR>銆const LARGE_INTEGER *pDueTime, //鎸囨槑瀹氭椂鍣ㄧ涓嬈℃縺媧葷殑鏃墮棿<BR>銆LONG lPeriod, //鎸囨槑姝ゅ悗瀹氭椂鍣ㄥ簲璇ラ棿闅斿闀挎椂闂存縺媧諱竴嬈?BR>銆PTIMERAPCROUTINE pfnCompletionRoutine,<BR>銆PVOID PvArgToCompletionRoutine,<BR>BOOL fResume);</TD></TR></TBODY></TABLE><BR>銆銆鍙栨秷鍙瓑寰呭畾鏃跺櫒<BR><BR> <TABLE class=txcode cellSpacing=0 cellPadding=0 align=center border=0> <TBODY> <TR> <TD>BOOl Cancel WaitableTimer(<BR>銆HANDLE hTimer //瑕佸彇娑堢殑瀹氭椂鍣?BR>);</TD></TR></TBODY></TABLE><BR>銆銆鎵撳紑鍙瓑寰呭畾鏃跺櫒<BR><BR>銆銆浣滀負(fù)涓縐嶅唴鏍稿璞★紝W(xué)aitableTimer涔熷彲浠ヨ鍏朵粬榪涚▼浠ュ悕瀛楁墦寮錛?BR><BR> <TABLE class=txcode cellSpacing=0 cellPadding=0 align=center border=0> <TBODY> <TR> <TD>HANDLE OpenWaitableTimer (<BR>銆DWORD fdwAccess,<BR>銆BOOL bInherithandle,<BR>銆PCTSTR pszName<BR>);</TD></TR></TBODY></TABLE><BR>銆銆<B>瀹炰緥</B><BR><BR>銆銆涓嬮潰緇欏嚭鐨勪竴涓▼搴忓彲鑳藉彂鐢熸閿佺幇璞★細(xì)<BR><BR> <TABLE class=txcode cellSpacing=0 cellPadding=0 align=center border=0> <TBODY> <TR> <TD>#include <<A target=_blank><FONT color=#3366cc>Windows</FONT></A>.h><BR>#include <stdio.h><BR>CRITICAL_SECTION cs1, cs2;<BR>long WINAPI ThreadFn(long);<BR>main()<BR>{<BR>銆long iThreadID;<BR>銆InitializeCriticalSection(&cs1);<BR>銆InitializeCriticalSection(&cs2);<BR>銆CloseHandle(CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadFn, NULL, 0,&iThreadID));<BR>銆while (TRUE)<BR>銆{<BR>銆銆EnterCriticalSection(&cs1);<BR>銆銆printf("\n綰跨▼1鍗犵敤涓寸晫鍖?");<BR>銆銆EnterCriticalSection(&cs2);<BR>銆銆printf("\n綰跨▼1鍗犵敤涓寸晫鍖?");<BR><BR>銆銆printf("\n綰跨▼1鍗犵敤涓や釜涓寸晫鍖?);<BR><BR>銆銆LeaveCriticalSection(&cs2);<BR>銆銆LeaveCriticalSection(&cs1);<BR><BR>銆銆printf("\n綰跨▼1閲婃斁涓や釜涓寸晫鍖?);<BR>銆銆Sleep(20);<BR>銆};<BR>銆return (0);<BR>}<BR><BR>long WINAPI ThreadFn(long lParam)<BR>{<BR>銆while (TRUE)<BR>銆{<BR>銆銆EnterCriticalSection(&cs2);<BR>銆銆printf("\n綰跨▼2鍗犵敤涓寸晫鍖?");<BR>銆銆EnterCriticalSection(&cs1);<BR>銆銆printf("\n綰跨▼2鍗犵敤涓寸晫鍖?");<BR><BR>銆銆printf("\n綰跨▼2鍗犵敤涓や釜涓寸晫鍖?);<BR><BR>銆銆LeaveCriticalSection(&cs1);<BR>銆銆LeaveCriticalSection(&cs2);<BR><BR>銆銆printf("\n綰跨▼2閲婃斁涓や釜涓寸晫鍖?);<BR>銆銆Sleep(20);<BR>銆};<BR>}</TD></TR></TBODY></TABLE><BR>銆銆榪愯榪欎釜紼嬪簭錛屽湪涓斾竴鏃﹀彂鐢熻繖鏍風(fēng)殑杈撳嚭錛?BR><BR>銆銆綰跨▼1鍗犵敤涓寸晫鍖?<BR><BR>銆銆綰跨▼2鍗犵敤涓寸晫鍖?<BR><BR>銆銆鎴?BR><BR>銆銆綰跨▼2鍗犵敤涓寸晫鍖?<BR><BR>銆銆綰跨▼1鍗犵敤涓寸晫鍖?<BR><BR>銆銆鎴?BR><BR>銆銆綰跨▼1鍗犵敤涓寸晫鍖?<BR><BR>銆銆綰跨▼2鍗犵敤涓寸晫鍖?<BR><BR>銆銆鎴?BR><BR>銆銆綰跨▼2鍗犵敤涓寸晫鍖?<BR><BR>銆銆綰跨▼1鍗犵敤涓寸晫鍖?<BR><BR>銆銆紼嬪簭灝?姝?鎺変簡錛屽啀涔熻繍琛屼笉涓嬪幓銆傚洜涓鴻繖鏍風(fēng)殑杈撳嚭錛屾剰鍛崇潃涓や釜綰跨▼鐩鎬簰絳夊緟瀵規(guī)柟閲婃斁涓寸晫鍖猴紝涔熷嵆鍑虹幇浜嗘閿併?BR><BR>銆銆濡傛灉鎴戜滑灝嗙嚎紼?鐨勬帶鍒跺嚱鏁版敼涓猴細(xì)<BR><BR> <TABLE class=txcode cellSpacing=0 cellPadding=0 align=center border=0> <TBODY> <TR> <TD>long WINAPI ThreadFn(long lParam)<BR>{<BR>銆while (TRUE)<BR>銆{<BR>銆銆EnterCriticalSection(&cs1);<BR>銆銆printf("\n綰跨▼2鍗犵敤涓寸晫鍖?");<BR>銆銆EnterCriticalSection(&cs2);<BR>銆銆printf("\n綰跨▼2鍗犵敤涓寸晫鍖?");<BR><BR>銆銆printf("\n綰跨▼2鍗犵敤涓や釜涓寸晫鍖?);<BR><BR>銆銆LeaveCriticalSection(&cs1);<BR>銆銆LeaveCriticalSection(&cs2);<BR><BR>銆銆printf("\n綰跨▼2閲婃斁涓や釜涓寸晫鍖?);<BR>銆銆Sleep(20);<BR>銆};<BR>}</TD></TR></TBODY></TABLE><BR>銆銆鍐嶆榪愯紼嬪簭錛屾閿佽娑堥櫎錛岀▼搴忎笉鍐嶆尅鎺夈傝繖鏄洜涓烘垜浠敼鍙樹簡綰跨▼2涓幏寰椾復(fù)鐣屽尯1銆?鐨勯『搴忥紝娑堥櫎浜嗙嚎紼?銆?鐩鎬簰絳夊緟璧勬簮鐨勫彲鑳芥с?BR><BR>銆銆鐢辨鎴戜滑寰楀嚭緇撹錛屽湪浣跨敤綰跨▼闂寸殑鍚屾鏈哄埗鏃訛紝瑕佺壒鍒暀蹇冩閿佺殑鍙戠敓銆?BR><img src ="http://m.shnenglu.com/ivenher/aggbug/2297.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/ivenher/" target="_blank">鐖遍キ鐩?/a> 2005-12-30 18:51 <a href="http://m.shnenglu.com/ivenher/articles/2297.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Win32澶氱嚎紼嬬▼搴忚璁′箣綰跨▼閫氫俊 錛堜簩錛?/title><link>http://m.shnenglu.com/ivenher/articles/2296.html</link><dc:creator>鐖遍キ鐩?/dc:creator><author>鐖遍キ鐩?/author><pubDate>Fri, 30 Dec 2005 10:50:00 GMT</pubDate><guid>http://m.shnenglu.com/ivenher/articles/2296.html</guid><wfw:comment>http://m.shnenglu.com/ivenher/comments/2296.html</wfw:comment><comments>http://m.shnenglu.com/ivenher/articles/2296.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/ivenher/comments/commentRss/2296.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/ivenher/services/trackbacks/2296.html</trackback:ping><description><![CDATA[<STRONG>涓寸晫鍖?BR><BR></STRONG>銆銆瀹氫箟涓寸晫鍖哄彉閲?BR><BR> <TABLE class=txcode cellSpacing=0 cellPadding=0 align=center border=0> <TBODY> <TR> <TD>CRITICAL_SECTION gCriticalSection;</TD></TR></TBODY></TABLE><BR>銆銆閫氬父鎯呭喌涓嬶紝CRITICAL_SECTION緇撴瀯浣撳簲璇ヨ瀹氫箟涓哄叏灞鍙橀噺錛屼互渚夸簬榪涚▼涓殑鎵鏈夌嚎紼嬫柟渚垮湴鎸夌収鍙橀噺鍚嶆潵寮曠敤璇ョ粨鏋勪綋銆?BR><BR>銆銆鍒濆鍖栦復(fù)鐣屽尯<BR><BR> <TABLE class=txcode cellSpacing=0 cellPadding=0 align=center border=0> <TBODY> <TR> <TD>VOID WINAPI InitializeCriticalSection(<BR>銆LPCRITICAL_SECTION lpCriticalSection<BR>銆//鎸囧悜紼嬪簭鍛樺畾涔夌殑CRITICAL_SECTION鍙橀噺<BR>);</TD></TR></TBODY></TABLE><BR>銆銆璇ュ嚱鏁扮敤浜庡pcs鎵鎸囩殑CRITICAL_SECTION緇撴瀯浣撹繘琛屽垵濮嬪寲銆傝鍑芥暟鍙槸璁劇疆浜嗕竴浜涙垚鍛樺彉閲忥紝瀹冪殑榪愯涓鑸笉浼?xì)澶辫触锛屽洜姝ゅ畠閲囩敤浜哣OID綾誨瀷鐨勮繑鍥炲箋傝鍑芥暟蹇呴』鍦ㄤ換浣曠嚎紼嬭皟鐢‥nterCriticalSection鍑芥暟涔嬪墠琚皟鐢紝濡傛灉涓涓嚎紼嬭瘯鍥捐繘鍏ヤ竴涓湭鍒濆鍖栫殑CRTICAL_SECTION錛岄偅涔堢粨鏋滃皢鏄緢闅鵑璁$殑銆?BR><BR>銆銆鍒犻櫎涓寸晫鍖?BR><BR> <TABLE class=txcode cellSpacing=0 cellPadding=0 align=center border=0> <TBODY> <TR> <TD>VOID WINAPI DeleteCriticalSection(<BR>銆LPCRITICAL_SECTION lpCriticalSection<BR>銆//鎸囧悜涓涓笉鍐嶉渶瑕佺殑CRITICAL_SECTION鍙橀噺<BR>);</TD></TR></TBODY></TABLE><BR>銆銆榪涘叆涓寸晫鍖?BR><BR> <TABLE class=txcode cellSpacing=0 cellPadding=0 align=center border=0> <TBODY> <TR> <TD>VOID WINAPI EnterCriticalSection(<BR>銆LPCRITICAL_SECTION lpCriticalSection<BR>銆//鎸囧悜涓涓綘鍗沖皢閿佸畾鐨凜RITICAL_SECTION鍙橀噺<BR>);</TD></TR></TBODY></TABLE><BR>銆銆紱誨紑涓寸晫鍖?BR><BR> <TABLE class=txcode cellSpacing=0 cellPadding=0 align=center border=0> <TBODY> <TR> <TD>VOID WINAPI LeaveCriticalSection(<BR>銆LPCRITICAL_SECTION lpCriticalSection<BR>銆//鎸囧悜涓涓綘鍗沖皢紱誨紑鐨凜RITICAL_SECTION鍙橀噺<BR>);</TD></TR></TBODY></TABLE><BR>銆銆浣跨敤涓寸晫鍖虹紪紼嬬殑涓鑸柟娉曟槸錛?BR><BR> <TABLE class=txcode cellSpacing=0 cellPadding=0 align=center border=0> <TBODY> <TR> <TD>void UpdateData()<BR>{<BR>銆EnterCriticalSection(&gCriticalSection);<BR>銆...//do something<BR>銆LeaveCriticalSection(&gCriticalSection);<BR>}</TD></TR></TBODY></TABLE><BR>銆銆鍏充簬涓寸晫鍖虹殑浣跨敤錛屾湁涓嬪垪娉ㄦ剰鐐癸細(xì)<BR><BR>銆銆錛?錛夋瘡涓叡浜祫婧愪嬌鐢ㄤ竴涓狢RITICAL_SECTION鍙橀噺錛?BR><BR>銆銆錛?錛変笉瑕侀暱鏃墮棿榪愯鍏抽敭浠g爜孌碉紝褰撲竴涓叧閿唬鐮佹闀挎椂闂磋繍琛屾椂錛屽叾浠栫嚎紼嬪氨浼?xì)杩涘叆绛夊緟鐘舵侊紝榪欎細(xì)闄嶄綆搴旂敤紼嬪簭鐨勮繍琛屾ц兘錛?BR><BR>銆銆錛?錛夊鏋滈渶瑕佸悓鏃惰闂涓祫婧愶紝鍒欏彲鑳借繛緇皟鐢‥nterCriticalSection錛?BR><BR>銆銆錛?錛塁ritical Section涓嶆槸OS鏍稿績瀵硅薄錛屽鏋滆繘鍏ヤ復(fù)鐣屽尯鐨勭嚎紼?鎸?浜嗭紝灝嗘棤娉曢噴鏀句復(fù)鐣岃祫婧愩傝繖涓己鐐瑰湪Mutex涓緱鍒頒簡寮ヨˉ銆?BR><BR>銆銆<B>浜掓枼</B><BR><BR>銆銆浜掓枼閲忕殑浣滅敤鏄繚璇佹瘡嬈″彧鑳芥湁涓涓嚎紼嬭幏寰椾簰鏂ラ噺鑰屽緱浠ョ戶緇墽琛岋紝浣跨敤CreateMutex鍑芥暟鍒涘緩錛?<BR><BR> <TABLE class=txcode cellSpacing=0 cellPadding=0 align=center border=0> <TBODY> <TR> <TD>HANDLE CreateMutex(<BR>銆LPSECURITY_ATTRIBUTES lpMutexAttributes,<BR>銆// 瀹夊叏灞炴х粨鏋勬寚閽堬紝鍙負(fù)NULL<BR>銆BOOL bInitialOwner, <BR>銆//鏄惁鍗犳湁璇ヤ簰鏂ラ噺錛孴RUE錛氬崰鏈夛紝FALSE錛氫笉鍗犳湁<BR>銆LPCTSTR lpName <BR>銆//淇″彿閲忕殑鍚嶇О<BR>);<BR></TD></TR></TBODY></TABLE><BR>銆銆Mutex鏄牳蹇冨璞★紝鍙互璺ㄨ繘紼嬭闂紝涓嬮潰鐨勪唬鐮佺粰鍑轟簡浠庡彟涓榪涚▼璁塊棶鍛藉悕Mutex鐨勪緥瀛愶細(xì)<BR><BR> <TABLE class=txcode cellSpacing=0 cellPadding=0 align=center border=0> <TBODY> <TR> <TD>HANDLE hMutex;<BR>hMutex = OpenMutex(MUTEX_ALL_<A target=_blank><FONT color=#3366cc>Access</FONT></A>, FALSE, L"mutexName"); <BR>if (hMutex){<BR>銆鈥?<BR>锝?BR>else{<BR>銆鈥?BR>}</TD></TR></TBODY></TABLE><BR>銆銆鐩稿叧API錛?BR><BR> <TABLE class=txcode cellSpacing=0 cellPadding=0 align=center border=0> <TBODY> <TR> <TD>BOOL WINAPI ReleaseMutex(<BR>銆HANDLE hMutex<BR>);</TD></TR></TBODY></TABLE><BR>銆銆浣跨敤浜掓枼緙栫▼鐨勪竴鑸柟娉曟槸錛?BR><BR> <TABLE class=txcode cellSpacing=0 cellPadding=0 align=center border=0> <TBODY> <TR> <TD>void UpdateResource()<BR>{<BR>銆WaitForSingleObject(hMutex,鈥?;<BR>銆...//do something<BR>銆ReleaseMutex(hMutex);<BR>}</TD></TR></TBODY></TABLE><BR>銆銆浜掓枼(mutex)鍐呮牳瀵硅薄鑳藉紜繚綰跨▼鎷ユ湁瀵瑰崟涓祫婧愮殑浜掓枼璁塊棶鏉冦備簰鏂ュ璞$殑琛屼負(fù)鐗規(guī)т笌涓寸晫鍖虹浉鍚岋紝浣嗘槸浜掓枼瀵硅薄灞炰簬鍐呮牳瀵硅薄錛岃屼復(fù)鐣屽尯鍒欏睘浜庣敤鎴鋒柟寮忓璞★紝鍥犳榪欏鑷磎utex涓嶤ritical Section鐨勫涓嬩笉鍚岋細(xì)<BR><BR>銆銆錛?錛?浜掓枼瀵硅薄鐨勮繍琛岄熷害姣斿叧閿唬鐮佹瑕佹參錛?BR><BR>銆銆錛?錛?涓嶅悓榪涚▼涓殑澶氫釜綰跨▼鑳藉璁塊棶鍗曚釜浜掓枼瀵硅薄錛?BR><BR>銆銆錛?錛?綰跨▼鍦ㄧ瓑寰呰闂祫婧愭椂鍙互璁懼畾涓涓秴鏃跺箋?BR><BR>銆銆涓嬪浘鏇磋緇嗗湴鍒楀嚭浜嗕簰鏂ヤ笌涓寸晫鍖虹殑涓嶅悓錛?BR><BR> <TABLE width="90%" align=center border=0> <TBODY> <TR> <TD> <DIV align=center><IMG src="http://image.21tx.com/image/20051216/17850.jpg" border=0></DIV></TD></TR></TBODY></TABLE><BR><img src ="http://m.shnenglu.com/ivenher/aggbug/2296.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/ivenher/" target="_blank">鐖遍キ鐩?/a> 2005-12-30 18:50 <a href="http://m.shnenglu.com/ivenher/articles/2296.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Win32澶氱嚎紼嬬▼搴忚璁′箣綰跨▼閫氫俊 錛堜竴錛?/title><link>http://m.shnenglu.com/ivenher/articles/2295.html</link><dc:creator>鐖遍キ鐩?/dc:creator><author>鐖遍キ鐩?/author><pubDate>Fri, 30 Dec 2005 10:49:00 GMT</pubDate><guid>http://m.shnenglu.com/ivenher/articles/2295.html</guid><wfw:comment>http://m.shnenglu.com/ivenher/comments/2295.html</wfw:comment><comments>http://m.shnenglu.com/ivenher/articles/2295.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/ivenher/comments/commentRss/2295.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/ivenher/services/trackbacks/2295.html</trackback:ping><description><![CDATA[<STRONG>綆浠?BR><BR></STRONG>銆銆綰跨▼涔嬮棿<A target=_blank><FONT color=#3366cc>閫氫俊</FONT></A>鐨勪袱涓熀鏈棶棰樻槸浜掓枼鍜屽悓姝ャ?BR><BR>銆銆綰跨▼鍚屾鏄寚綰跨▼涔嬮棿鎵鍏鋒湁鐨勪竴縐嶅埗綰﹀叧緋伙紝涓涓嚎紼嬬殑鎵ц渚濊禆鍙︿竴涓嚎紼嬬殑娑堟伅錛屽綋瀹冩病鏈夊緱鍒板彟涓涓嚎紼嬬殑娑堟伅鏃跺簲絳夊緟錛岀洿鍒版秷鎭埌杈炬椂鎵嶈鍞ら啋銆?BR><BR>銆銆綰跨▼浜掓枼鏄寚瀵逛簬鍏變韓鐨?A target=_blank><FONT color=#3366cc>鎿嶄綔緋葷粺</FONT></A>璧勬簮錛堟寚鐨勬槸騫夸箟鐨?璧勬簮"錛岃屼笉鏄?A target=_blank><FONT color=#3366cc>Windows</FONT></A>鐨?res鏂囦歡錛岃濡傚叏灞鍙橀噺灝辨槸涓縐嶅叡浜祫婧愶級錛屽湪鍚勭嚎紼嬭闂椂鐨勬帓瀹冩с傚綋鏈夎嫢騫蹭釜綰跨▼閮借浣跨敤鏌愪竴鍏變韓璧勬簮鏃訛紝浠諱綍鏃跺埢鏈澶氬彧鍏佽涓涓嚎紼嬪幓浣跨敤錛屽叾瀹冭浣跨敤璇ヨ祫婧愮殑綰跨▼蹇呴』絳夊緟錛岀洿鍒板崰鐢ㄨ祫婧愯呴噴鏀捐璧勬簮銆?BR><BR>銆銆綰跨▼浜掓枼鏄竴縐嶇壒孌婄殑綰跨▼鍚屾銆?BR><BR>銆銆瀹為檯涓婏紝浜掓枼鍜屽悓姝ュ搴旂潃綰跨▼闂撮氫俊鍙戠敓鐨勪袱縐嶆儏鍐碉細(xì)<BR><BR>銆銆錛?錛夊綋鏈夊涓嚎紼嬭闂叡浜祫婧愯屼笉浣胯祫婧愯鐮村潖鏃訛紱<BR><BR>銆銆錛?錛夊綋涓涓嚎紼嬮渶瑕佸皢鏌愪釜浠誨姟宸茬粡瀹屾垚鐨勬儏鍐甸氱煡鍙﹀涓涓垨澶氫釜綰跨▼鏃躲?BR><BR>銆銆鍦╓IN32涓紝鍚屾鏈哄埗涓昏鏈変互涓嬪嚑縐嶏細(xì)<BR><BR>銆銆錛?錛変簨浠?Event);<BR><BR>銆銆錛?錛変俊鍙烽噺(semaphore);<BR><BR>銆銆錛?錛変簰鏂ラ噺(mutex);<BR><BR>銆銆錛?錛変復(fù)鐣屽尯(Critical section)銆?BR><BR>銆銆<B>鍏ㄥ眬鍙橀噺</B><BR><BR>銆銆鍥犱負(fù)榪涚▼涓殑鎵鏈夌嚎紼嬪潎鍙互璁塊棶鎵鏈夌殑鍏ㄥ眬鍙橀噺錛屽洜鑰屽叏灞鍙橀噺鎴愪負(fù)Win32澶氱嚎紼嬮氫俊鐨勬渶綆鍗曟柟寮忋備緥濡傦細(xì)<BR><BR> <TABLE class=txcode cellSpacing=0 cellPadding=0 align=center border=0> <TBODY> <TR> <TD>int var; //鍏ㄥ眬鍙橀噺<BR>UINT ThreadFunction(LPVOIDpParam)<BR>{<BR>銆var = 0;<BR>銆while (var < MaxValue)<BR>銆{<BR>銆銆//綰跨▼澶勭悊<BR>銆銆::InterlockedIncrement(long*) &var);<BR>銆}<BR>銆return 0;<BR>}<BR>璇風(fēng)湅涓嬪垪紼嬪簭錛?BR>int globalFlag = false; <BR>DWORD WINAPI ThreadFunc(LPVOID n)<BR>{<BR>銆Sleep(2000);<BR>銆globalFlag = true;<BR><BR>銆return 0;<BR>}<BR><BR>int main()<BR>{<BR>銆HANDLE hThrd;<BR>銆DWORD threadId;<BR><BR>銆hThrd = CreateThread(NULL, 0, ThreadFunc, NULL, 0, &threadId);<BR>銆if (hThrd)<BR>銆{<BR>銆銆printf("Thread launched\n");<BR>銆銆CloseHandle(hThrd);<BR>銆}<BR><BR>銆while (!globalFlag)<BR>銆;<BR>銆printf("exit\n");<BR>}</TD></TR></TBODY></TABLE><BR>銆銆涓婅堪紼嬪簭涓嬌鐢ㄥ叏灞鍙橀噺鍜寃hile寰幆鏌ヨ榪涜綰跨▼闂村悓姝ワ紝瀹為檯涓婏紝榪欐槸涓縐嶅簲璇ラ伩鍏嶇殑鏂規(guī)硶錛屽洜涓猴細(xì) <BR><BR>銆銆錛?錛夊綋涓葷嚎紼嬪繀欏諱嬌鑷繁涓嶵hreadFunc鍑芥暟鐨勫畬鎴愯繍琛屽疄鐜板悓姝ユ椂錛屽畠騫舵病鏈変嬌鑷繁榪涘叆鐫$湢鐘舵併傜敱浜庝富綰跨▼娌℃湁榪涘叆鐫$湢鐘舵侊紝鍥犳鎿嶄綔緋葷粺緇х畫涓哄畠璋冨害C P U鏃墮棿錛岃繖灝辮鍗犵敤鍏朵粬綰跨▼鐨勫疂璐墊椂闂村懆鏈燂紱<BR><BR>銆銆錛?錛夊綋涓葷嚎紼嬬殑浼樺厛綰ч珮浜庢墽琛孴hreadFunc鍑芥暟鐨勭嚎紼嬫椂錛屽氨浼?xì)鍙戠敓globalFlag姘歌繙涓嶈兘琚祴鍊間負(fù)true鐨勬儏鍐點傚洜涓哄湪榪欑鎯呭喌涓嬶紝緋葷粺鍐充笉浼?xì)灏嗕恢M綍鏃墮棿鐗囧垎閰嶇粰ThreadFunc綰跨▼銆?BR><BR>銆銆<B>浜嬩歡</B><BR><BR>銆銆浜嬩歡(Event)鏄疻IN32鎻愪緵鐨勬渶鐏墊椿鐨勭嚎紼嬮棿鍚屾鏂瑰紡錛屼簨浠跺彲浠ュ浜庢縺鍙戠姸鎬?signaled or true)鎴栨湭嬋鍙戠姸鎬?unsignal or false)銆傛牴鎹姸鎬佸彉榪佹柟寮忕殑涓嶅悓錛屼簨浠跺彲鍒嗕負(fù)涓ょ被錛?BR><BR>銆銆錛?錛夋墜鍔ㄨ緗細(xì)榪欑瀵硅薄鍙彲鑳界敤紼嬪簭鎵嬪姩璁劇疆錛屽湪闇瑕佽浜嬩歡鎴栬呬簨浠跺彂鐢熸椂錛岄噰鐢⊿etEvent鍙?qiáng)ResetEvent鏉ヨ繘琛岃緗?BR><BR>銆銆錛?錛夎嚜鍔ㄦ仮澶嶏細(xì)涓鏃︿簨浠跺彂鐢熷茍琚鐞嗗悗錛岃嚜鍔ㄦ仮澶嶅埌娌℃湁浜嬩歡鐘舵侊紝涓嶉渶瑕佸啀嬈¤緗?BR><BR>銆銆鍒涘緩浜嬩歡鐨勫嚱鏁板師鍨嬩負(fù)錛?BR><BR> <TABLE class=txcode cellSpacing=0 cellPadding=0 align=center border=0> <TBODY> <TR> <TD>HANDLE CreateEvent(<BR>銆LPSECURITY_ATTRIBUTES lpEventAttributes,<BR>銆// SECURITY_ATTRIBUTES緇撴瀯鎸囬拡錛屽彲涓篘ULL<BR>銆BOOL bManualReset, <BR>銆// 鎵嬪姩/鑷姩<BR>銆// TRUE錛氬湪WaitForSingleObject鍚庡繀欏繪墜鍔ㄨ皟鐢≧esetEvent娓呴櫎淇″彿<BR>銆// FALSE錛氬湪WaitForSingleObject鍚庯紝緋葷粺鑷姩娓呴櫎浜嬩歡淇″彿<BR>銆BOOL bInitialState, //鍒濆鐘舵?BR>銆LPCTSTR lpName //浜嬩歡鐨勫悕縐?BR>);</TD></TR></TBODY></TABLE><BR>銆銆浣跨敤"浜嬩歡"鏈哄埗搴旀敞鎰忎互涓嬩簨欏癸細(xì)<BR><BR>銆銆錛?錛夊鏋滆法榪涚▼璁塊棶浜嬩歡錛屽繀欏誨浜嬩歡鍛藉悕錛屽湪瀵逛簨浠跺懡鍚嶇殑鏃跺欙紝瑕佹敞鎰忎笉瑕佷笌緋葷粺鍛藉悕絀洪棿涓殑鍏跺畠鍏ㄥ眬鍛藉悕瀵硅薄鍐茬獊錛?BR><BR>銆銆錛?錛変簨浠舵槸鍚﹁鑷姩鎭㈠錛?BR><BR>銆銆錛?錛変簨浠剁殑鍒濆鐘舵佽緗?BR><BR>銆銆鐢變簬event瀵硅薄灞炰簬鍐呮牳瀵硅薄錛屾晠榪涚▼B鍙互璋冪敤OpenEvent鍑芥暟閫氳繃瀵硅薄鐨勫悕瀛楄幏寰楄繘紼婣涓璭vent瀵硅薄鐨勫彞鏌勶紝鐒跺悗灝嗚繖涓彞鏌勭敤浜嶳esetEvent銆丼etEvent鍜學(xué)aitForMultipleObjects絳夊嚱鏁頒腑銆傛娉曞彲浠ュ疄鐜頒竴涓繘紼嬬殑綰跨▼鎺у埗鍙︿竴榪涚▼涓嚎紼嬬殑榪愯錛屼緥濡傦細(xì) <BR><BR> <TABLE class=txcode cellSpacing=0 cellPadding=0 align=center border=0> <TBODY> <TR> <TD>HANDLE hEvent=OpenEvent(EVENT_ALL_<A target=_blank><FONT color=#3366cc>Access</FONT></A>,true,"MyEvent"); <BR>ResetEvent(hEvent);</TD></TR></TBODY></TABLE><BR><img src ="http://m.shnenglu.com/ivenher/aggbug/2295.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/ivenher/" target="_blank">鐖遍キ鐩?/a> 2005-12-30 18:49 <a href="http://m.shnenglu.com/ivenher/articles/2295.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Windows澶氱嚎紼嬪浠誨姟璁捐鍒濇http://m.shnenglu.com/ivenher/articles/983.html鐖遍キ鐩?/dc:creator>鐖遍キ鐩?/author>Tue, 08 Nov 2005 11:13:00 GMThttp://m.shnenglu.com/ivenher/articles/983.htmlhttp://m.shnenglu.com/ivenher/comments/983.htmlhttp://m.shnenglu.com/ivenher/articles/983.html#Feedback0http://m.shnenglu.com/ivenher/comments/commentRss/983.htmlhttp://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>


]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            一本色道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部国产精品成人观看| 国产精品高潮视频| 欧美日韩中文字幕在线| 欧美国产日本| 欧美成人自拍视频| 免费视频一区| 老司机免费视频一区二区三区 | 亚洲性感激情| 亚洲精品在线看| 亚洲高清在线观看一区| 久久理论片午夜琪琪电影网|