锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
浠庡埆浜築LOG涓婄湅鍒扮殑涓滆タ~~寰堟湁鐢▇~璁頒笅鏉錛侊紒
CancelWaitableTimer 榪欎釜鍑芥暟鐢ㄤ簬鍙栨秷涓涓彲浠ョ瓑寰呬笅鍘葷殑璁℃椂鍣ㄦ搷浣?
CallNamedPipe 榪欎釜鍑芥暟鐢變竴涓笇鏈涢氳繃綆¢亾閫氫俊鐨勪竴涓鎴瘋繘紼嬭皟鐢?
ConnectNamedPipe 鎸囩ず涓鍙版湇鍔″櫒絳夊緟涓嬪幓錛岀洿鑷沖鎴鋒満鍚屼竴涓懡鍚嶇閬撹繛鎺?
CreateEvent 鍒涘緩涓涓簨浠跺璞?
CreateMailslot 鍒涘緩涓涓偖璺傝繑鍥炵殑鍙ユ焺鐢遍偖璺湇鍔″櫒浣跨敤錛堟敹浠朵漢錛?
CreateMutex 鍒涘緩涓涓簰鏂ヤ綋錛圡UTEX錛?
CreateNamedPipe 鍒涘緩涓涓懡鍚嶇閬撱傝繑鍥炵殑鍙ユ焺鐢辯閬撶殑鏈嶅姟鍣ㄧ浣跨敤
CreatePipe 鍒涘緩涓涓尶鍚嶇閬?
CreateProcess 鍒涘緩涓涓柊榪涚▼錛堟瘮濡傛墽琛屼竴涓▼搴忥級
CreateSemaphore 鍒涘緩涓涓柊鐨勪俊鍙鋒満
CreateWaitableTimer 鍒涘緩涓涓彲絳夊緟鐨勮鏃跺櫒瀵硅薄
DisconnectNamedPipe 鏂紑涓涓鎴蜂笌涓涓懡鍚嶇閬撶殑榪炴帴
DuplicateHandle 鍦ㄦ寚鍑轟竴涓幇鏈夌郴緇熷璞″綋鍓嶅彞鏌勭殑鎯呭喌涓嬶紝涓洪偅涓璞″垱寤轟竴涓柊鍙ユ焺
ExitProcess 涓涓涓繘紼?
FindCloseChangeNotification 鍏抽棴涓涓敼鍔ㄩ氱煡瀵硅薄
FindExecutable 鏌ユ壘涓庝竴涓寚瀹氭枃浠跺叧鑱斿湪涓璧風殑紼嬪簭鐨勬枃浠跺悕
FindFirstChangeNotification 鍒涘緩涓涓枃浠墮氱煡瀵硅薄銆傝瀵硅薄鐢ㄤ簬鐩戣鏂囦歡緋葷粺鍙戠敓鐨勫彉鍖?
FindNextChangeNotification 閲嶈涓涓枃浠舵敼鍙橀氱煡瀵硅薄錛屼護鍏剁戶緇洃瑙嗕笅涓嬈″彉鍖?
FreeLibrary 閲婃斁鎸囧畾鐨勫姩鎬侀摼鎺ュ簱
GetCurrentProcess 鑾峰彇褰撳墠榪涚▼鐨勪竴涓吉鍙ユ焺
GetCurrentProcessId 鑾峰彇褰撳墠榪涚▼涓涓敮涓鐨勬爣璇嗙
GetCurrentThread 鑾峰彇褰撳墠綰跨▼鐨勪竴涓吉鍙ユ焺
GetCurrentThreadId 鑾峰彇褰撳墠綰跨▼涓涓敮涓鐨勭嚎紼嬫爣璇嗙
GetExitCodeProces 鑾峰彇涓涓凡涓柇榪涚▼鐨勯鍑轟唬鐮?
GetExitCodeThread 鑾峰彇涓涓凡涓綰跨▼鐨勯鍑轟唬鐮?
GetHandleInformation 鑾峰彇涓庝竴涓郴緇熷璞″彞鏌勬湁鍏崇殑淇℃伅
GetMailslotInfo 鑾峰彇涓庝竴涓偖璺湁鍏崇殑淇℃伅
GetModuleFileName 鑾峰彇涓涓凡瑁呰澆妯℃澘鐨勫畬鏁磋礬寰勫悕縐?
GetModuleHandle 鑾峰彇涓涓簲鐢ㄧ▼搴忔垨鍔ㄦ侀摼鎺ュ簱鐨勬ā鍧楀彞鏌?
GetPriorityClass 鑾峰彇鐗瑰畾榪涚▼鐨勪紭鍏堢駭鍒?
GetProcessShutdownParameters 璋冩煡緋葷粺鍏抽棴鏃朵竴涓寚瀹氱殑榪涚▼鐩稿浜庡叾瀹冭繘紼嬬殑鍏抽棴鏃╄繜鎯呭喌
GetProcessTimes 鑾峰彇涓庝竴涓繘紼嬬殑緇忚繃鏃墮棿鏈夊叧鐨勪俊鎭?
GetProcessWorkingSetSize 浜嗚В涓涓簲鐢ㄧ▼搴忓湪榪愯榪囩▼涓疄闄呭悜瀹冧氦浠樹簡澶氬ぇ瀹歸噺鐨勫唴瀛?
GetSartupInfo 鑾峰彇涓涓繘紼嬬殑鍚姩淇℃伅
GetThreadPriority 鑾峰彇鐗瑰畾綰跨▼鐨勪紭鍏堢駭鍒?
GetTheardTimes 鑾峰彇涓庝竴涓嚎紼嬬殑緇忚繃鏃墮棿鏈夊叧鐨勪俊鎭?
GetWindowThreadProcessId 鑾峰彇涓庢寚瀹氱獥鍙e叧鑱斿湪涓璧風殑涓涓繘紼嬪拰綰跨▼鏍囪瘑絎?
LoadLibrary 杞藉叆鎸囧畾鐨勫姩鎬侀摼鎺ュ簱錛屽茍灝嗗畠鏄犲皠鍒板綋鍓嶈繘紼嬩嬌鐢ㄧ殑鍦板潃絀洪棿
LoadLibraryEx 瑁呰澆鎸囧畾鐨勫姩鎬侀摼鎺ュ簱錛屽茍涓哄綋鍓嶈繘紼嬫妸瀹冩槧灝勫埌鍦板潃絀洪棿
LoadModule 杞藉叆涓涓猈indows搴旂敤紼嬪簭錛屽茍鍦ㄦ寚瀹氱殑鐜涓繍琛?
MsgWaitForMultipleObjects 絳変警鍗曚釜瀵硅薄鎴栦竴緋誨垪瀵硅薄鍙戝嚭淇″彿銆傚榪斿洖鏉′歡宸茬粡婊¤凍錛屽垯绔嬪嵆榪斿洖
SetPriorityClass 璁劇疆涓涓繘紼嬬殑浼樺厛綰у埆
SetProcessShutdownParameters 鍦ㄧ郴緇熷叧闂湡闂達紝涓烘寚瀹氳繘紼嬭緗粬鐩稿浜庡叾瀹冪▼搴忕殑鍏抽棴欏哄簭
SetProcessWorkingSetSize 璁劇疆鎿嶄綔緋葷粺瀹為檯鍒掑垎緇欒繘紼嬩嬌鐢ㄧ殑鍐呭瓨瀹歸噺
SetThreadPriority 璁懼畾綰跨▼鐨勪紭鍏堢駭鍒?
ShellExecute 鏌ユ壘涓庢寚瀹氭枃浠跺叧鑱斿湪涓璧風殑紼嬪簭鐨勬枃浠跺悕
TerminateProcess 緇撴潫涓涓繘紼?
WinExec 榪愯鎸囧畾鐨勭▼搴?
int var; //鍏ㄥ眬鍙橀噺 UINT ThreadFunction(LPVOIDpParam) { 銆var = 0; 銆while (var < MaxValue) 銆{ 銆銆//綰跨▼澶勭悊 銆銆::InterlockedIncrement(long*) &var); 銆} 銆return 0; } 璇風湅涓嬪垪紼嬪簭錛?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"); } |
HANDLE CreateEvent( 銆LPSECURITY_ATTRIBUTES lpEventAttributes, 銆// SECURITY_ATTRIBUTES緇撴瀯鎸囬拡錛屽彲涓篘ULL 銆BOOL bManualReset, 銆// 鎵嬪姩/鑷姩 銆// TRUE錛氬湪WaitForSingleObject鍚庡繀欏繪墜鍔ㄨ皟鐢≧esetEvent娓呴櫎淇″彿 銆// FALSE錛氬湪WaitForSingleObject鍚庯紝緋葷粺鑷姩娓呴櫎浜嬩歡淇″彿 銆BOOL bInitialState, //鍒濆鐘舵?br /> 銆LPCTSTR lpName //浜嬩歡鐨勫悕縐?br /> ); |
HANDLE hEvent=OpenEvent(EVENT_ALL_ACCESS,true,"MyEvent"); ResetEvent(hEvent); |
CRITICAL_SECTION gCriticalSection; |
VOID WINAPI InitializeCriticalSection( 銆LPCRITICAL_SECTION lpCriticalSection 銆//鎸囧悜紼嬪簭鍛樺畾涔夌殑CRITICAL_SECTION鍙橀噺 ); |
VOID WINAPI DeleteCriticalSection( 銆LPCRITICAL_SECTION lpCriticalSection 銆//鎸囧悜涓涓笉鍐嶉渶瑕佺殑CRITICAL_SECTION鍙橀噺 ); |
VOID WINAPI EnterCriticalSection( 銆LPCRITICAL_SECTION lpCriticalSection 銆//鎸囧悜涓涓綘鍗沖皢閿佸畾鐨凜RITICAL_SECTION鍙橀噺 ); |
VOID WINAPI LeaveCriticalSection( 銆LPCRITICAL_SECTION lpCriticalSection 銆//鎸囧悜涓涓綘鍗沖皢紱誨紑鐨凜RITICAL_SECTION鍙橀噺 ); |
void UpdateData() { 銆EnterCriticalSection(&gCriticalSection); 銆...//do something 銆LeaveCriticalSection(&gCriticalSection); } |
HANDLE CreateMutex( 銆LPSECURITY_ATTRIBUTES lpMutexAttributes, 銆// 瀹夊叏灞炴х粨鏋勬寚閽堬紝鍙負NULL 銆BOOL bInitialOwner, 銆//鏄惁鍗犳湁璇ヤ簰鏂ラ噺錛孴RUE錛氬崰鏈夛紝FALSE錛氫笉鍗犳湁 銆LPCTSTR lpName 銆//淇″彿閲忕殑鍚嶇О ); |
HANDLE hMutex; hMutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, L"mutexName"); if (hMutex){ 銆… 锝?br /> else{ 銆… } |
BOOL WINAPI ReleaseMutex( 銆HANDLE hMutex ); |
void UpdateResource() { 銆WaitForSingleObject(hMutex,…); 銆...//do something 銆ReleaseMutex(hMutex); } |
![]() |
HANDLE CreateSemaphore ( 銆PSECURITY_ATTRIBUTE psa, 銆LONG lInitialCount, //寮濮嬫椂鍙緵浣跨敤鐨勮祫婧愭暟 銆LONG lMaximumCount, //鏈澶ц祫婧愭暟 PCTSTR pszName); |
BOOL WINAPI ReleaseSemaphore( 銆HANDLE hSemaphore, 銆LONG lReleaseCount, //淇″彿閲忕殑褰撳墠璧勬簮鏁板鍔爈ReleaseCount 銆LPLONG lpPreviousCount ); |
HANDLE OpenSemaphore ( 銆DWORD fdwAccess, 銆BOOL bInherithandle, 銆PCTSTR pszName ); |
int globalVar = 0; DWORD WINAPI ThreadFunc1(LPVOID n) { 銆globalVar++; 銆return 0; } DWORD WINAPI ThreadFunc2(LPVOID n) { 銆globalVar++; 銆return 0; } |
00401038 mov eax,[globalVar (0042d3f0)] 0040103D add eax,1 00401040 mov [globalVar (0042d3f0)],eax |
int globalVar = 0; DWORD WINAPI ThreadFunc1(LPVOID n) { 銆InterlockedExchangeAdd(&globalVar,1); 銆return 0; } DWORD WINAPI ThreadFunc2(LPVOID n) { 銆InterlockedExchangeAdd(&globalVar,1); 銆return 0; } |
HANDLE CreateWaitableTimer( 銆PSECURITY_ATTRISUTES psa, 銆BOOL fManualReset,//浜哄伐閲嶇疆鎴栬嚜鍔ㄩ噸緗畾鏃跺櫒 PCTSTR pszName); |
BOOL SetWaitableTimer( 銆HANDLE hTimer, //瑕佽緗殑瀹氭椂鍣?br /> 銆const LARGE_INTEGER *pDueTime, //鎸囨槑瀹氭椂鍣ㄧ涓嬈℃縺媧葷殑鏃墮棿 銆LONG lPeriod, //鎸囨槑姝ゅ悗瀹氭椂鍣ㄥ簲璇ラ棿闅斿闀挎椂闂存縺媧諱竴嬈?br /> 銆PTIMERAPCROUTINE pfnCompletionRoutine, 銆PVOID PvArgToCompletionRoutine, BOOL fResume); |
BOOl Cancel WaitableTimer( 銆HANDLE hTimer //瑕佸彇娑堢殑瀹氭椂鍣?br /> ); |
HANDLE OpenWaitableTimer ( 銆DWORD fdwAccess, 銆BOOL bInherithandle, 銆PCTSTR pszName ); |
#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); 銆}; } |
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); 銆}; } |