Win32中线程的创建和关闭
1、win32中线程的创建
在win32中创建线程API函数
1 HANDLE CreateThread( 2 LPSECURITY_ATTRIBUTES lpsa, 3 DWORD cbStack, 4 LPTHREAD_START_ROUTINE lpStartAddr, 5 LPVOID lpvThreadParam, 6 DWORD fdwCreate, 7 LPDWORD lpIDThread 8 );
创建后一般关闭线程句柄,因为后期可能不在用到。关闭句柄不会影响线程的工作,这样可以保证进程在退出时,减小引用计数,线程会释放资源。
2、线程的关闭
[1] 退出线程函数的循环来退出线程;(尽量采用该方法)
[2] 进程中的一个线程调用ExitProcess;
[3] 另一个进程的线程中调用TerminalProcess;
3、线程同步
[1] 关键区域(Critical Sections)
创建函数:InitializeCriticalSection
删除函数:DeleteCriticalSection
进入函数:EnterCriticalSection
离开函数:LeaveCriticalSection
提示:
(1)不要在一个Critical Section中调用sleep或者任何wait函数;
(2)出现两个Critical Section时避免死锁;
[2] 事件(Event)
创建函数:CreateEvent
删除函数:CloseHandle
进入函数:SetEvent
离开函数:ResetEvent
[3] 互斥量(Mutex)
创建函数:CreateMutex
删除函数:CloseHandle
进入函数:WriteForSingleObject、WaitForMultiObject
离开函数:ReleaseMutex
提示:
(1)CloseHandle并不是实际的关闭互斥量,Mutex是一个核心对象,CloseHandle只是将引用计数减一,如果进程退出时,引用计数降为零,系统就是释放核心的资源。
[4] 信号量(Semaphores)
线程同步中的注意点:
[1] 只有Critical Sections不是核心对象;
[2] 互斥量ReleaseMutex后立即变为激活状态;
[3] Event可以完全在程序的操控之下;
void InitializeCriticalSection( LPCRITICAL_SECTION lpCriticalSection );