??xml version="1.0" encoding="utf-8" standalone="yes"?>
从别人BLOG上看到的东西~~很有用~~C来~Q!
CancelWaitableTimer q个函数用于取消一个可以等待下ȝ计时器操?
CallNamedPipe q个函数׃个希望通过道通信的一个客戯E调?
ConnectNamedPipe 指示一台服务器{待下去Q直臛_h同一个命名管道连?
CreateEvent 创徏一个事件对?
CreateMailslot 创徏一个邮路。返回的句柄由邮路服务器使用Q收件hQ?
CreateMutex 创徏一个互斥体QMUTEXQ?
CreateNamedPipe 创徏一个命名管道。返回的句柄q道的服务器端使用
CreatePipe 创徏一个匿名管?
CreateProcess 创徏一个新q程Q比如执行一个程序)
CreateSemaphore 创徏一个新的信h
CreateWaitableTimer 创徏一个可{待的计时器对象
DisconnectNamedPipe 断开一个客户与一个命名管道的q接
DuplicateHandle 在指Z个现有系l对象当前句柄的情况下,为那个对象创Z个新句柄
ExitProcess 中止一个进E?
FindCloseChangeNotification 关闭一个改动通知对象
FindExecutable 查找与一个指定文件关联在一L(fng)E序的文件名
FindFirstChangeNotification 创徏一个文仉知对象。该对象用于监视文gpȝ发生的变?
FindNextChangeNotification 重设一个文件改变通知对象Qo(h)其l监视下一ơ变?
FreeLibrary 释放指定的动态链接库
GetCurrentProcess 获取当前q程的一个伪句柄
GetCurrentProcessId 获取当前q程一个唯一的标识符
GetCurrentThread 获取当前U程的一个伪句柄
GetCurrentThreadId 获取当前U程一个唯一的线E标识符
GetExitCodeProces 获取一个已中断q程的退Z?
GetExitCodeThread 获取一个已中止U程的退Z?
GetHandleInformation 获取与一个系l对象句柄有关的信息
GetMailslotInfo 获取与一个邮路有关的信息
GetModuleFileName 获取一个已装蝲模板的完整\径名U?
GetModuleHandle 获取一个应用程序或动态链接库的模块句?
GetPriorityClass 获取特定q程的优先?
GetProcessShutdownParameters 调查pȝ关闭时一个指定的q程相对于其它进E的关闭早迟情况
GetProcessTimes 获取与一个进E的l过旉有关的信?
GetProcessWorkingSetSize 了解一个应用程序在q行q程中实际向它交付了多大定w的内?
GetSartupInfo 获取一个进E的启动信息
GetThreadPriority 获取特定U程的优先?
GetTheardTimes 获取与一个线E的l过旉有关的信?
GetWindowThreadProcessId 获取与指定窗口关联在一L(fng)一个进E和U程标识W?
LoadLibrary 载入指定的动态链接库Qƈ它映射到当前进E用的地址I间
LoadLibraryEx 装蝲指定的动态链接库Qƈ为当前进E把它映到地址I间
LoadModule 载入一个Windows应用E序Qƈ在指定的环境中运?
MsgWaitForMultipleObjects {侯单个对象或一pd对象发出信号。如q回条g已经满Q则立即q回
SetPriorityClass 讄一个进E的优先U别
SetProcessShutdownParameters 在系l关闭期_(d)为指定进E设|他相对于其它程序的关闭序
SetProcessWorkingSetSize 讄操作pȝ实际划分l进E用的内存定w
SetThreadPriority 讑֮U程的优先?
ShellExecute 查找与指定文件关联在一L(fng)E序的文件名
TerminateProcess l束一个进E?
WinExec q行指定的程?
int var; //全局变量 UINT ThreadFunction(LPVOIDpParam) { var = 0; while (var < MaxValue) { //U程处理 ::InterlockedIncrement(long*) &var); } return 0; } L(fng)下列E序Q?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_ATTRIBUTESl构指针Q可为NULL BOOL bManualReset, // 手动/自动 // TRUEQ在WaitForSingleObject后必L动调用ResetEvent清除信号 // FALSEQ在WaitForSingleObject后,pȝ自动清除事g信号 BOOL bInitialState, //初始状?br /> LPCTSTR lpName //事g的名U?br /> ); |
HANDLE hEvent=OpenEvent(EVENT_ALL_ACCESS,true,"MyEvent"); ResetEvent(hEvent); |
CRITICAL_SECTION gCriticalSection; |
VOID WINAPI InitializeCriticalSection( LPCRITICAL_SECTION lpCriticalSection //指向E序员定义的CRITICAL_SECTION变量 ); |
VOID WINAPI DeleteCriticalSection( LPCRITICAL_SECTION lpCriticalSection //指向一个不再需要的CRITICAL_SECTION变量 ); |
VOID WINAPI EnterCriticalSection( LPCRITICAL_SECTION lpCriticalSection //指向一个你卛_锁定的CRITICAL_SECTION变量 ); |
VOID WINAPI LeaveCriticalSection( LPCRITICAL_SECTION lpCriticalSection //指向一个你卛_d的CRITICAL_SECTION变量 ); |
void UpdateData() { EnterCriticalSection(&gCriticalSection); ...//do something LeaveCriticalSection(&gCriticalSection); } |
HANDLE CreateMutex( LPSECURITY_ATTRIBUTES lpMutexAttributes, // 安全属性结构指针,可ؓ(f)NULL BOOL bInitialOwner, //是否占有该互斥量QTRUEQ占有,FALSEQ不占有 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, //信号量的当前资源数增加lReleaseCount 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, //指明定时器第一ơ激zȝ旉 LONG lPeriod, //指明此后定时器应该间隔多长时间激zM?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("\nU程1占用临界?"); EnterCriticalSection(&cs2); printf("\nU程1占用临界?"); printf("\nU程1占用两个临界?); LeaveCriticalSection(&cs2); LeaveCriticalSection(&cs1); printf("\nU程1释放两个临界?); Sleep(20); }; return (0); } long WINAPI ThreadFn(long lParam) { while (TRUE) { EnterCriticalSection(&cs2); printf("\nU程2占用临界?"); EnterCriticalSection(&cs1); printf("\nU程2占用临界?"); printf("\nU程2占用两个临界?); LeaveCriticalSection(&cs1); LeaveCriticalSection(&cs2); printf("\nU程2释放两个临界?); Sleep(20); }; } |
long WINAPI ThreadFn(long lParam) { while (TRUE) { EnterCriticalSection(&cs1); printf("\nU程2占用临界?"); EnterCriticalSection(&cs2); printf("\nU程2占用临界?"); printf("\nU程2占用两个临界?); LeaveCriticalSection(&cs1); LeaveCriticalSection(&cs2); printf("\nU程2释放两个临界?); Sleep(20); }; } |