新Visual C++应用开发与实践 教学课件 刘乃琦_ VC 第5章 多线程.pptVIP

  • 0
  • 0
  • 约 29页
  • 2017-07-12 发布于广东
  • 举报

新Visual C++应用开发与实践 教学课件 刘乃琦_ VC 第5章 多线程.ppt

为了使用事件对象,系统提供了一组与事件对象有关的函数,下面逐一介绍。 1.CreateEvent 该函数用于创建一个事件对象。 HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes, BOOL bManualReset, BOOL bInitialState, LPCTSTR lpName ); lpEventAttributes:事件对象的安全属性。 bManualReset:事件对象的类型。为TRUE,表示创建人工重置事件对象;为FALSE,表示创建自动重置事件对象。 bInitialState:事件对象初始的通知状态。为TRUE,表示通知状态;为FALSE,表示未通知状态。 lpName:事件对象的名称。 2.SetEvent 该函数用于将事件设置为通知状态。 BOOL SetEvent( HANDLE hEvent ); hEvent表示事件对象句柄。 3.ResetEvent 该函数用于将事件设置为未通知状态。 BOOL ResetEvent(HANDLE hEvent ); hEvent表示事件对象句柄。 在设计线程同步时,通常需要使用WaitForSingleObject函数来等待内核对象的状态。 DWORD WaitForSingleObject(HANDLE hHandle,DWORD dwMilliseconds ); hHandle:等待对象的句柄。 dwMilliseconds:等待的时间,单位为毫秒。 信号量对象也属于系统内核对象之一,包含有使用计数。当使用计数为0时,信号量对象处于无信号状态;当使用计数大于0时,信号量对象处于有信号状态。系统同样提供了一组操作信号量的函数,下面分别进行介绍。 1.CreateSemaphore 该函数用于创建一个信号量对象。 HANDLE CreateSemaphore(LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, LONG lInitialCount, LONG lMaximumCount, LPCTSTR lpName ); lpSemaphoreAttributes:信号量的安全属性,可以为NULL。 lInitialCount:信号量的初始计数。 lMaximumCount:信号量的最大计数。 lpName:信号量的名称。 5.4.3 使用信号量对象实现线程同步 2.ReleaseSemaphore 该函数用于递增信号量的使用计数。 BOOL ReleaseSemaphore(HANDLE hSemaphore,LONG lReleaseCount,LPLONG lpPreviousCount); hSemaphore:信号量对象句柄。 lReleaseCount:信号量的递增数量。 lpPreviousCount:用于返回之前的信号量的使用计数。 临界区又称为关键代码段,指的是一小段代码,在代码执行前,它需要独占某些资源。在程序中通常将多个线程同时访问某个资源的代码作为临界区。为了使用临界区,系统提供了一组操作临界区对象的函数,下面分别进行介绍。 1.InitializeCriticalSection 该函数用于初始化临界区对象。 void InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection); lpCriticalSection表示一个临界区对象指针。在使用临界区对象时,首先需要定义一个临界区对象,然后使用该函数进行初始化。 5.4.4 使用临界区对象实现线程同步 2.EnterCriticalSection 该函数用于等待临界区对象的所有权。 void EnterCriticalSection(LPCRITICAL_SECTION lpCriticalSection); lpCriticalSection表示一个临界区对象指针。 3.LeaveCriticalSection 该函数用于释放临界区对象的所有权。 void LeaveCriticalSection(LPCRITICAL_SECTION lpCriticalSection ); lpCriticalSection表示一个临界区对象指针。 4.DeleteCriticalSection 该函数用于释放为临界区对象分配的相关资源,使临界区对象不再可用。 void DeleteCriticalSection(LPCRITICAL_SECTION lpCriticalSection); 其中,lpCriticalSection表示一个临界区对象指针。 互斥对象属于系统内核对象,它能够使

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档