新Visual C++大学教程 教学课件 冯博琴 第10章 打印、动态链接库及多线程技术.pptVIP

  • 7
  • 0
  • 约 77页
  • 2016-10-26 发布于广东
  • 举报

新Visual C++大学教程 教学课件 冯博琴 第10章 打印、动态链接库及多线程技术.ppt

HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes DWORD dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId ); 2.终止线程 (1)ExitThread函数 ExitThread函数用于结束线程。 语法: VOID ExitThread( DWORD dwExitCode ); (2)TerminateThread函数 TerminateThread函数用于强行终止线程。 语法: BOOL TerminateThread( HANDLE hThread, DWORD dwExitCode ); 10.3.3 线程同步 1.线程同步的重要性 当应用程序中存在多个线程序时,如果这些线程都访问某一公共的资源,某一个全局变量可能会出现意想不到的结果。 2.互斥实现线程同步 互斥对象属于系统内核对象,它能够使线程拥有对某个资源的绝对访问权。 互斥对象的使用方式如下。 (1)当互斥对象的线程ID为0时,表示互 斥对象不被任何线程所拥有,此时,系统会发出该互斥对象的通知信号。 (2)当互斥对象的线程ID不为0时,表示当前有线程拥有该互斥对象。 在程序中,可以通过CreateMutex函数创建一个互斥对象。 如果函数执行成功,则返回值是互斥对象的句柄。 否则,返回值为NULL。 语法: HANDLE CreateMutex( LPSECURITY_ATTRIBUTES lpMutexAttributes,BOOL bInitialOwner, LPCTSTR lpName ); 3.临界区实现线程同步 临界区又称为关键代码段,指的是一小段代码,在代码执行前,它需要独占某些资源。 为了使用临界区,需要定义一个CRITICAL_SECTION类型的变量,然后调用InitializeCriticalSection函数对变量进行初始化,该函数语法如下: VOID InitializeCriticalSection( LPCRITICAL_SECTION lpCriticalSection ); EnterCriticalSection函数的作用是查看CRITICAL_SECTION结构成员变量的值,判断是否有线程访问临界区的资源。 EnterCriticalSection函数语法如下: VOID EnterCriticalSection( LPCRITICAL_SECTION lpCriticalSection ); 4.事件实现线程同步 事件对象包含有引用计数、事件类型、事件的通知状态等信息。 事件对象主要分为两类,人工重置事件对象和自动重置事件对象。 Windows系统提供了CreateEvent函数用于创建事件对象,该函数语法如下: HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes, BOOL bManualReset, BOOL bInitialState, LPCTSTR lpName ); LPVOID lpReserved //系统所保留 { switch(ul_reason_for_call) { case DLL_PROCESS_ATTACH: //进程被调用 case DLL_THREAD_ATTACH: //线程被调用 case DLL_THREAD_DETACH: //进程被停止 case DLL_PROCESS_DETACH: //线程被停止 return TRUE; } } 2.动态链接库和静态链接库 (1)静态链接库 静态链接库的英文全称是Static Link Library,它经常是一些相对小的,比较稳定的函数库。 (2)动态链接库 动态链接库的英文全称是Dynamic Link Library,简称DLL。 动态链接库可以在需要的时候动态加载到内存

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档