windowsAPI应用开发-chapter8_多任务与多线程
深入浅出windows api程序设计

深入浅出windows api程序设计Windows API程序设计是指使用Windows API(应用程序接口)编写程序,而WindowsAPI 是一组允许我们实现Windows上的应用程序的函数和数据结构。
使用Windows API能够充分利用Windows操作系统的各种功能,编写出非常复杂和高效的Windows程序。
本篇文章将介绍Windows API程序设计的基础知识。
1. 程序的入口点2. 创建窗口在Windows API程序中,我们通常需要创建一个程序窗口。
窗口是操作系统提供给我们的一个用于显示信息、输入信息等用户界面,它是我们与操作系统交互的桥梁。
因此,创建一个窗口是非常重要的。
创建窗口的函数是CreateWindowEx,这个函数接受很多参数,包括窗口的大小、位置、样式等。
使用CreateWindowEx函数创建窗口后,我们就可以利用其他的窗口相关函数,如ShowWindow函数和UpdateWindow函数,展示和更新窗口。
3. 窗口消息处理在Windows API程序中,窗口消息处理是窗口程序的核心部分。
这个过程是指Windows 操作系统向窗口程序发送消息,窗口程序根据消息类型进行处理,然后返回一个结果给操作系统以告知消息的处理结果。
窗口消息处理是一个无限循环,我们通过调用GetMessage函数来获得窗口的消息,并且在消息循环中通过调用TranslateMessage和DispatchMessage函数进行消息翻译和转发。
同时,我们可以自定义窗口消息处理函数,用于处理我们自己定义的消息。
4. 绘图Windows API程序中的绘图通常使用GDI(图形设备接口),它是Windows操作系统提供的一个绘图管理系统,提供了许多函数和数据结构,用于绘制各种图形。
GDI操作基本分为一个创建DC设备上下文句柄,两种操作:一种是绘制图形到DC设备上下文中,另一种是从设备上下文中提取数据。
WINDOWS_API 教程

WINDOWS API C++ 编程当我们使用着漂亮的界面,方便快捷的应用程序的时候。
我们才会发现,以前曾编写的程序是多么的粗糙(TC编写的程序)。
简单的界面,16色的显示系统,大大的落后于计算机的发展。
简单的说就是杀鸡用牛刀。
如何该改变这种情况呢?Microsoft公司在推出wind ows操作系统的时候给出了简单易行的解决方案。
这就是WINDOWS平台API应用程序接口。
当然API也是发展的,它从WIN 16 API发展到了现在普遍使用的WIN 32 API。
只有充分理解API函数功能和用法,才能深入到WINDOWS系统的内部,才能充分挖掘出操作系统给我们提供的强大功能。
现在就让我们放弃那DOS应用程序,进入WINDOWS编程的海洋之中吧。
要想了解WINDOWS API那么我们必须先了解WINDOWS下的程序是如何进行驱动的。
同学们可以很清楚的发现到,当你在使用WINDOWS记事本的时候,当键盘输入字符的时候字就会出现在屏幕上。
当你移动鼠标的时候,光标就会在屏幕上移动。
双击鼠标、单击鼠标就会有相应的事件发生。
这些都是由于WINDOWS具有的事件驱动的属性造成的。
比如说当你按下键盘的字符键的时候,消息队列就会向程序发送WM_CHAR的消息,如果你所写的程序中含有处理这个消息的函数,程序就会执行它。
为了更好的了解WINDOWS编程,这里我必须介绍几个基本的概念:1,句柄:它是WINDOWS编程的基础。
一个句柄是指WINDOWS在内存中使用的一个唯一的整数质,是一个4个字节长的数值,用于标识应用程序中不同对象和相同对象的不同实例。
这里我列出几种WINDOWS常用的句柄:HWND: 标示窗口句柄HINSTANCE:标示当前实例句柄HCOURSOR:标示光标句柄HFONT: 标示字体句柄HPEN:标示画笔句柄HBRUSH:标示画刷句柄HDC:标示设备环境句柄HBITMP:标示位图句柄HICON:标示图标句柄HMENU:标示菜单句柄HFILE:标示文件句柄由于WINDOWS应用程序利用WINDOWS消息来与其它的WINDOWS应用程序及W INDOWS系统进行消息交换。
windows程序设计 (2)

Windows程序设计简介Windows程序设计是指在Windows操作系统上开发和设计应用程序。
Windows操作系统提供了丰富的应用程序开发工具和API,使开发者能够利用各种编程语言(如C++、C#、等)开发功能强大、丰富多样的应用程序。
在Windows上进行程序设计可以涵盖很多方面,包括图形用户界面(GUI)设计、操作系统交互、网络通信、以及与硬件设备的交互等。
本文将重点介绍Windows程序设计的基本概念和一些常用的开发工具和技术。
开发工具在Windows上进行程序设计,可以使用各种开发工具和集成开发环境(IDE)来简化开发过程。
以下是一些常用的Windows程序设计开发工具:1.Visual Studio:Visual Studio是一套功能强大的集成开发环境,由Microsoft开发和维护。
它支持多种编程语言,包括C++、C#、Visual Basic等,并且提供了丰富的开发工具和调试功能。
2.Dev-C++:Dev-C++是一个免费开源的C++编程环境,它提供了一个简单易用的集成开发环境,并且可以方便地编译和调试C++程序。
3.Code::Blocks:Code::Blocks是一个开源的跨平台集成开发环境,支持多种编程语言,包括C++、C等。
它提供了丰富的插件和功能,可以方便地进行Windows程序设计。
除了以上列举的开发工具,还有其他一些可供选择的开发工具,开发者可以根据自己的需求和喜好来选择合适的工具。
Windows程序设计基础在进行Windows程序设计之前,了解Windows操作系统的基本概念和原理是非常重要的。
以下是一些Windows程序设计中常用的基础知识:1.Windows窗口:Windows窗口是Windows程序的基本界面单元。
每个窗口都有自己的窗口过程(WindowProcedure),用于处理窗口消息和事件。
2.控件和对话框:Windows程序中常用的GUI元素称为控件,如按钮、文本框、列表框等。
操作系统的多任务与多线程支持

操作系统的多任务与多线程支持操作系统是计算机系统中最为核心的软件之一,它负责管理和控制计算机中的硬件资源以及运行程序的执行。
多任务和多线程是操作系统的两个重要特性,它们在提高计算机系统性能、资源利用率和用户体验等方面发挥着重要作用。
一、多任务支持多任务是指操作系统能够同时运行多个程序,并且给用户的感觉是这些程序在同时进行。
操作系统通过轮询或者中断的方式在不同程序之间进行切换,为每个程序分配一定的执行时间片,给用户一种同时运行多个程序的错觉。
多任务支持使得用户能够方便地在计算机上同时运行多个应用程序,例如同时打开多个浏览器窗口、编辑文档和播放音乐等。
同时,多任务也提高了计算机系统的资源利用率,因为在一个时间片内,操作系统可以将执行权交给其他程序,使得系统中的计算资源得到充分利用。
在多任务系统中,操作系统通过调度算法来决定每个程序的执行顺序和时间片大小。
常见的调度算法有先来先服务(FCFS)、时间片轮转、优先级调度等。
这些算法根据不同的系统需求和优先级策略来进行选择。
二、多线程支持多线程是指在一个程序内部,能够同时执行多个子任务或者称之为线程的部分。
多线程在一个进程内共享同一块内存空间,各个线程之间可以共享数据和资源,使得程序的并发度增加,进而提高系统的吞吐量和响应速度。
多线程支持使得程序在执行过程中能够以更高效的方式处理并发任务,因为线程之间切换的开销要远远小于进程之间的切换。
此外,多线程也能够简化程序的编写,通过将程序拆分为多个线程来处理不同的任务,使得程序的结构更加清晰和模块化。
在多线程系统中,操作系统需要提供线程的管理和调度功能。
通过线程调度算法,操作系统能够决定哪些线程先被执行、如何切换线程以及如何调整不同线程之间的优先级。
常见的线程调度算法有抢占式调度、协同式调度和时间片轮转等。
三、多任务与多线程的关系多任务和多线程是操作系统中相关但又具有不同概念和作用的特性。
多任务是指操作系统能够同时运行多个程序,而多线程是指一个程序内部可以同时执行多个线程。
Windows多线程多任务设计初步

Windows多线程多任务设计初步(下载源码就到源码网:)[前言:]当前流行的Windows操作系统,它能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力。
用进程和线程的观点来研究软件是当今普遍采用的方法,进程和线程的概念的出现,对提高软件的并行性有着重要的意义。
现在的应用软件无一不是多线程多任务处理,单线城的软件是不可想象的。
因此掌握多线程多任务设计方法对每个程序员都是必需要掌握的。
本文针对多线程技术在应用中经常遇到的问题,如线程间的通信、同步等,对它们分别进行探讨。
一、理解线程要讲解线程,不得不说一下进程,进程是应用程序的执行实例,每个进程是由私有的虚拟地址空间、代码、数据和其它系统资源组成。
进程在运行时创建的资源随着进程的终止而死亡。
线程的基本思想很简单,它是一个独立的执行流,是进程内部的一个独立的执行单元,相当于一个子程序,它对应Visual C++中的CwinThread类的对象。
单独一个执行程序运行时,缺省的运行包含的一个主线程,主线程以函数地址的形式,如main或WinMain函数,提供程序的启动点,当主线程终止时,进程也随之终止,但根据需要,应用程序又可以分解成许多独立执行的线程,每个线程并行的运行在同一进程中。
一个进程中的所有线程都在该进程的虚拟地址空间中,使用该进程的全局变量和系统资源。
操作系统给每个线程分配不同的CPU时间片,在某一个时刻,CPU只执行一个时间片内的线程,多个时间片中的相应线程在CPU内轮流执行,由于每个时间片时间很短,所以对用户来说,仿佛各个线程在计算机中是并行处理的。
操作系统是根据线程的优先级来安排CPU的时间,优先级高的线程优先运行,优先级低的线程则继续等待。
线程被分为两种:用户界面线程和工作线程(又称为后台线程)。
用户界面线程通常用来处理用户的输入并响应各种事件和消息,其实,应用程序的主执行线程CWinAPP对象就是一个用户界面线程,当应用程序启动时自动创建和启动,同样它的终止也意味着该程序的结束,进城终止。
WindowsAPI编程入门

WindowsAPI编程⼊门Windows ⼯作原理的中⼼思想就是“动态链接”概念。
Windows ⾃⾝带有⼀⼤套函数,应⽤程序就是通过调⽤这些函数来实现它的⽤户界⾯和在屏幕上显⽰⽂本和图形的。
这些函数都是在动态链接库⾥实现的。
这些⽂件的名称都带有后缀 .dll,或有时带有 .exe。
Windows 的 3 个主要⼦系统:内核(kernel),⽤户(user),GDI。
内核负责操作系统的传统⼯作:如内存管理,⽂件输⼊/输出以及任务管理等。
⽤户指的是⽤户界⾯,负责所有的窗⼝管理。
GDI 就是图形设备接⼝,负责在屏幕或打印机上显⽰⽂本与图形。
在 Windows 程序中,调⽤ Windows 函数与调⽤ C 语⾔的库函数没有什么两样。
最主要的区别就是 C 语⾔库函数的机器代码会直接链接到你的程序代码中去,⽽ Windows 函数则是放到你的程序之外的 DLL ⾥。
Windows 程序运⾏时,它通过⼀个叫“动态链接”的进程与 Windows 接⼝。
每个 Windows 的 EXE ⽂件包含它所要⽤到的各个动态链接库以及库中的函数的引⽤地址。
当⼀个 Windows 程序被装⼊内存后,程序中的函数调⽤都被解析 DLL 函数⼊⼝的指针,同时这些被调⽤的函数也被装⼊内存。
当链接 Windows 程序以⽣存可执⾏⽂件时,⼀定得链接你的编程环境所提供的特殊的“导⼊库”。
这些导⼊库包含所有 Windows 函数调⽤要碰到的动态链接库的名字及引⽤信息。
链接程序利⽤这些信息构建 EXE ⽂件中的表格,当装⼊程序的时候,Windows 要靠这些表格来解析 Windows 函数调⽤。
另外值得提醒的⼀点是,MFC 是对 API 的封装,隐藏了许多复杂的情节。
Windows 的 Hello World!程序:#include <windows.h>int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow){MessageBox (NULL, TEXT ("Hello, World!"), TEXT ("HelloMsg"), MB_OKCANCEL) ;return0 ;}该程序的 #include<windows.h> 就是像 C 语⾔的 #include<stdio.h> ⼀样重要的头⽂件。
WindowsAPI函数大全(API之进程和线程函数)

WindowsAPI函数大全(API之进程和线程函数)API之进程和线程函数CancelWaitableTimer 这个函数用于取消一个可以等待下去的计时器操作CallNamedPipe 这个函数由一个希望通过管道通信的一个客户进程调用ConnectNamedPipe 指示一台服务器等待下去,直至客户机同一个命名管道连接CreateEvent 创建一个事件对象CreateMailslot 创建一个邮路。
返回的句柄由邮路服务器使用(收件人)CreateMutex 创建一个互斥体(MUTEX)CreateNamedPipe 创建一个命名管道。
返回的句柄由管道的服务器端使用CreatePipe 创建一个匿名管道CreateProcess 创建一个新进程(比如执行一个程序)CreateSemaphore 创建一个新的信号机CreateWaitableTimer 创建一个可等待的计时器对象DisconnectNamedPipe 断开一个客户与一个命名管道的连接DuplicateHandle 在指出一个现有系统对象当前句柄的情况下,为那个对象创建一个新句柄ExitProcess 中止一个进程FindCloseChangeNotification 关闭一个改动通知对象FindExecutable 查找与一个指定文件关联在一起的程序的文件名FindFirstChangeNotification 创建一个文件通知对象。
该对象用于监视文件系统发生的变化FindNextChangeNotification 重设一个文件改变通知对象,令其继续监视下一次变化FreeLibrary 释放指定的动态链接库GetCurrentProcess 获取当前进程的一个伪句柄GetCurrentProcessId 获取当前进程一个唯一的标识符GetCurrentThread 获取当前线程的一个伪句柄GetCurrentThreadId 获取当前线程一个唯一的线程标识符GetExitCodeProces 获取一个已中断进程的退出代码GetExitCodeThread 获取一个已中止线程的退出代码GetHandleInformation 获取与一个系统对象句柄有关的信息GetMailslotInfo 获取与一个邮路有关的信息GetModuleFileName 获取一个已装载模板的完整路径名称GetModuleHandle 获取一个应用程序或动态链接库的模块句柄GetPriorityClass 获取特定进程的优先级别GetProcessShutdownParameters 调查系统关闭时一个指定的进程相对于其它进程的关闭早迟情况GetProcessTimes 获取与一个进程的经过时间有关的信息GetProcessWorkingSetSize 了解一个应用程序在运行过程中实际向它交付了多大容量的内存GetSartupInfo 获取一个进程的启动信息GetThreadPriority 获取特定线程的优先级别GetTheardTimes 获取与一个线程的经过时间有关的信息GetWindowThreadProcessId 获取与指定窗口关联在一起的一个进程和线程标识符LoadLibrary 载入指定的动态链接库,并将它映射到当前进程使用的地址空间LoadLibraryEx 装载指定的动态链接库,并为当前进程把它映射到地址空间LoadModule 载入一个Windows应用程序,并在指定的环境中运行MsgWaitForMultipleObjects 等侯单个对象或一系列对象发出信号。
多任务与多线程的区别

多任务与多线程的区别1.多任务在计算中,多任务是⼀种多个任务(也称之为进程)共享处理资源(如CPU)的⽅法。
在多任务操作系统上,例如Windows XP,您可以同时运⾏多个应⽤程序。
多任务实质是指操作系统在每个计算任务间快速切换,以致于看上去不同的应⽤似乎在同时执⾏多项操作。
当CPU时钟频率稳步提⾼时,不仅应⽤程序的运⾏速率可以更快,⽽且操作系统在应⽤间的切换速率也更快。
这样就提供了更好的整体性能——⼀台计算机可以同时发⽣多项操作,每项应⽤可以更快速地运⾏。
2. 单核对于拥有单个CPU核的计算机,任意时刻只能运⾏⼀项任务,这也意味着CPU主动地执⾏该任务的指令。
多任务通过调度(Scheduling)哪⼀项任务在哪⼀时刻运⾏以及何时切换到另⼀项任务,解决了这⼀问题。
图1。
单核系统⽀持多任务操作系统。
⽂字处理、Email、r⽹页浏览器、防病毒软件、进程、操作系统、CPU核3. 多核当运⾏于多核系统时,多任务操作系统可以真正地并发执⾏多项任务。
针对不同的任务,多个计算引擎独⽴地⼯作。
例如,在⼀个双核系统,有四项应⽤,如⽂字处理、电⼦邮件、⽹页浏览和防病毒软件,每项应⽤可以同时访问⼀个独⽴的处理器核。
您可以在检查电⼦邮件的同时输⼊⼀封⽂档,真正实现多任务,从⽽改善应⽤的整体性能。
图2。
双核系统⽀持多任务操作系统,如Windows XP,以真正地同时执⾏两项任务。
⽂字处理、Email电⼦邮件、⽹页浏览器、防病毒软件、进程、操作系统、CPU核操作系统通过在独⽴的CPU核之间划分不同的应⽤或进程,从⽽更有效地执⾏多项应⽤。
该计算机可以将⼯作任务分摊化——每个核在管理和切换原先⼀半数量的应⽤任务,并提供更好的整体吞吐量与性能。
实际上,这些应⽤任务是并⾏地执⾏的。
4. 多线程多线程将多任务的思想拓展到应⽤,因此,您可以将单个应⽤中的特定步骤进⼀步分解成⼀个个线程,每个线程可以并⾏运⾏。
操作系统不仅在不同的应⽤任务间分配处理时间,⽽且在⼀项应⽤的每个线程间分配处理时间。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第八章:多任务与多线程
电子信息与工程学院 指导老师:贾 迪 邮箱:lgd_jd@
第八章:多任务与多线程
多任务的不同模式 Windows进程与线程 线程同步简介 临界区 互斥与信号量 事件对象
多任务的不同模式
多任务系统 多任务是Windows的特色之一。其实多任务的概念早在UNIX时代就已 经提出并应用了,但真正的实现大众化还是在Windows出现之后。 Windows 2000/XP还支持使用多个CPU来对进程的多个线程提供服务 ,在线程一定的情况下,这意味着每一个线程获得的时间片就会增加, 执行的速度相应加快。 多任务带来的方便 多任务的引入带来了很多方便,在Windows系统下,大家可能有过这 样的经历:一边调试着代码,一边听着用软件播放的心爱的MP3,这就 是多任务。
第八章:多任务与多线程
多任务的不同模式 Windows进程与线程 线程同步简介 临界区 互斥与信号量 事件对象
Windows进程相关函数
CreateProcess ● 说明 函数CreateProcess是用来创建一个新的进程和其原始线程并启动该进程。 ● 原型 BOOL CreateProcess(LPCTSTR lpApplicationName, LPTSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCTSTR lpCurrentDirectory, LPSTARTUPINFO lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation); ● 返回值 若函数创建成功则返回TRUE,否则返回FALSE。
●
Windows进程相关函数
SuspendThread和ResumeThread
● 说明 函数SuspendThread用于挂起一个线程,系统会为每个线程建立一个挂起计数 。调用一次该函数,使挂起计数加1,只要挂起计数大于0,则就挂起该线程。调 用一次ResumeThread可以使挂起计数减1,当挂起计数恢复为零时,就恢复这 个挂起线程的运行。 ● 原型 DWORD SuspendThread( HANDLE hThread); DWORD ResumeThread( HANDLE hThread); ● 参数 hThread:是待挂起的线程对象的句柄。 返回值 若函数调用成功均返回先前的挂起计数,否则均返回OxFFFFFFFF。
Windows进程相关函数
CreateThread
● 说明 函数CreateThread是用来创建一个新的线程对象并启动线程。该线程在创建它的进程的进 程空间内执行。线程的默认优先级为THREAD_PRIORITY_NORMAL,可以使用函数 SetThreadPriority和GetThreadPriority来重新设置和获得线程的当前优先级。线程对象 将一直停留在系统中,直到调用函数ExitThread终止线程和调用Closehandle关闭所有的句 柄为止。 ● 原型 HANDLE CreateThread (LPSECURITY_ATTRIBUTES lpThreadAttributes, DWORD dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId); 返回值 若函数调用成功则返回新线程对象的句柄,否则返回NULL。
● 返回值 若函数调用成功则返回进程对象的句柄,否则返回FALSE。
Windows进程相关函数
ExitProcess
● 说明 函数ExitProcess是用来结束一个进程和其中包括的所有线程,并返回公共退出码。
● 原型 VOID ExitProcess( UINT uExitCode );
● 参数 uExitCode:是进程和其所有线程的退出码。 ● 返回值 此函数没有返回值,但可以用函数GetExitCodeProcess检索进程的退出码。
临界区相关API
●
● ●
●
LeaveCriticalSection 说明 此函数用于释放对临界区对象的所有权。每次线程对同一个对象执行 EnterCriticalSection或TryEnterCriticalSection都必须调用 LeaveCriticalSection函数。 原型 VOID LeaveCriticalSection( LPCRITICAL_SECTION lpCs); 参数 lpCs:是指向临界区对象的指针,与在它之前调用的函数 EnterCriticalSection或TryEnterCriticalSection的参数应一致。 返回值 此函数无返回值。
多任务的不同模式
多任务系统分类 非抢占式:早起Windows,Linux 抢占式:Windows,Unix,uCosII 多线程协作 在多线程情况下,编写一个比较合理的程序体系结构是:用主线程使用 消息队列创建程序需要的所有窗口,其他的线程采用无消息队列创建以 进行后台处理,也就是说它们除了和主线程通信之外不与用户进行任何 交流。
●
Windows进程相关函数
ExitThread
● 说明 函数ExitThread用于结束线程。当明确调用此函数后从线程过程中返回此函数 时,释放当前线程的堆栈并终止线程的运行。但是,只有关闭了线程所有的句柄 后,才可以从系统中删除线程。 ● 原型 VOID ExitThread(DWORD dwExitCode); 参数 dwExitCode:是调用线程的退出码。 返回值 此函数没有返回值,但可以用函数GetExitCodeThread检索线程的退出码。
第八章:多任务与多线程
多任务的不同模式 Windows进程与线程 线程同步简介 临界区 互斥与信号量 事件对象
互斥与信号量
同步对象的状态 信号态 非信号态 当同步对象处于非信号态时,等待线程就不能继续执行,直到同 步对象返回信号态,等待线程方可以继续执行。
互斥与信号量
互斥 互斥(mutex)对象的名字来自于术语互斥(mutual exclusion)。每次一个线程 只能拥有一个互斥。一个线程在拥有互斥时,同步对象互斥就进入非信号态;另 一个线程可以申请该互斥的所有权,但它必须等到前一个线程释放了所有权(即 同步对象进入信号态)才能得到互斥。 信号量 信号量对象是在设定时就指派初始的有限个计数,当一个线程获得对象的所有权 时,其计数就减1。当一个拥有对象所有权的线程释放其对象的所有权时,其计 数就加1。当信号量的计数为零时,则信号量锁定在非信号态,即线程不再可以 获得访问的权限,直到信号量的计数大于0。
临界区相关API
●
● ● ●
EnterCriticalSection 说明 此函数用于等待指定的临界区对象的所有权。授予调用线程所有权后, 该函数返回,临界区对象在单个进程的各线程内强制互斥同步。在线程 拥有临界区对象以后,对同一个临界区对象应调用 EnterCriticalSection函数,防止发生死锁。在退出临界区后用 LeaveCriticalSe- ction函数使其他线程可以进入临界区。 原型 VOID EnterCriticalSection( LPCRITICAL_SECTION lpCs); 参数 lpCs:是指向临界区对象的指针。 返回值 此函数无返回值。
●
●
第八章:多任务与多线程
多任务的不同模式 Windows进程与线程 线程同步简介 临界区 互斥与信号量 事件对象
线程同步简介
线程同步 在抢占式多任务的环境中,同一进程内可能存在两个甚至更多的线程访 问同一块内存,必须设立一个机制避免同时访问的冲突。另外,即使不 存在访问内存的冲突,但如果线程的执行中共享了进程资源,系统资源 或线程将需要协作执行,也会出现一些同步问题。 同步对象分类 临界区 互斥 信号量 事件
临界区相关API
●
● ●
●
DeleteCriticalSection 说明 此函数用于删除一个临界区对象,释放所有与不再为自己所控制的临界 区对象有关的资源。一个临界区对象被删除,就不能再对其调用函数 EnterCriticalSection,函数TryEnterCriticalSection和函数 LeaveCriticalSection了。 原型 VOID DeletaCriticalSection ( LPCRITICAL_SECTION lpCs); 参数 lpCs:是指向已存在的临界区对象的指针。 返回值 此函数无返回值。
第八章:多任务与多线程
多任务的不同模式 Windows进程与线程 线程同步简介 临界区 互斥与信号量 事件对象
临界区
临界区的作用 在日常生活中人们接触较多的十字路口也许就可以称做“临界区”,在 同一时刻不允许有非对开的车辆通过临界区,否则就可能引发交通事故 ,所以有必要设立交通灯指挥交通。在多任务多线程的环境中,也存在 着相同的问题,两个或两个以上的线程共享数据的情况很常见。当一个 线程读这些数据而另一个线程正在修改这些数据时,问题就出现了,情 况会变得很混乱。设立临界区就是为了解决冲突,对线程进行同步处理 和协调。
Windows进程相关函数
OpenProcess
● 说明 函数OpenProcess是用来获得一个已经存在的进程对象的句柄。