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 
); 
posted @ 2016-11-21 20:10  oscarwin  阅读(4013)  评论(0编辑  收藏  举报