类似SendMessage() 为同步,PostMessage()为异步
线程中同步机制 --> Critical section
Critical section 是一块线程共享资源,使用下面这些API, 来保证同一时间只有一个线程可以操作该critical section。
(即给资源加锁)
void WINAPI InitializeCriticalSection(
_Out_ LPCRITICAL_SECTION lpCriticalSection
);
void WINAPI DeleteCriticalSection(
_Inout_ LPCRITICAL_SECTION lpCriticalSection
);
void WINAPI EnterCriticalSection(
_Inout_ LPCRITICAL_SECTION lpCriticalSection
);
void WINAPI LeaveCriticalSection(
_Inout_ LPCRITICAL_SECTION lpCriticalSection
);
使用这些API时需要注意,不要长时间去锁住一个资源。
所以不要在EnterCriticalSection 和 LeaveCriticalSection 之间使用Sleep 和 Wait...一类的函数。
Critical section 有一个缺点,就是Critical section 不能知道进入的线程是死是活。
比如说当一个线程调用了EnterCriticalSection 后,线程
线程中同步机制 --> Critical section
Critical section 是一块线程共享资源,使用下面这些API, 来保证同一时间只有一个线程可以操作该critical section。
(即给资源加锁)
void WINAPI InitializeCriticalSection(
_Out_ LPCRITICAL_SECTION lpCriticalSection
);
void WINAPI DeleteCriticalSection(
_Inout_ LPCRITICAL_SECTION lpCriticalSection
);
void WINAPI EnterCriticalSection(
_Inout_ LPCRITICAL_SECTION lpCriticalSection
);
void WINAPI LeaveCriticalSection(
_Inout_ LPCRITICAL_SECTION lpCriticalSection
);
使用这些API时需要注意,不要长时间去锁住一个资源。
所以不要在EnterCriticalSection 和 LeaveCriticalSection 之间使用Sleep 和 Wait...一类的函数。
Critical section 有一个缺点,就是Critical section 不能知道进入的线程是死是活。
比如说当一个线程调用了EnterCriticalSection 后,线程