当前位置:首页 > Windows体系及编程结课作业
Windows体系编程结课作业
Windows体系及编程
结 课 作 业
号: 指导教师:
学生姓名: 成 绩:
提交日期:2013/05/27 第 页 共 页
| |
| |
专业班级: 学 Windows体系编程结课作业
(结课作业如打印,纸张用A4,左装订;页边距:上下2.5cm,左2.9cm, 右2.1cm;字体:宋体小四号,1.25倍行距。) 思考题:
一、讨论编程语言工具的选择(例如Java、Delphi、C++ Bulider、VC、VB、C#、PHP、Perl、Python、Ruby、JavaScript、JScript、VBScript、PowerBuilder、MatLab等等)
二、多线程同步和互斥有何异同,分别有几种实现方法,都是什么?每种方法的优点和不足是什么?
三、比较Windows的GDI、GDI+和WPF等图形子系统。 四、探讨MFC和Win32/64 API的内容、特点、发展和比较。 五、DLL注入和API拦截的方法有几种,都是什么? 请回答上述思考题,要求内容较为详实,有独立的见解。
第 页 共 页
Windows体系编程结课作业
思考题解答:
一、一般情况下,开发小型应用程序应使用Visual Basic、.NET软件应使用C#、开发大
型/系统软件时最好选用Visual C++、开发网络/安全软件应选用Java、开发Web/XML软件选用Java或Visual C#、开发数据库通用软件应选用Delphi/PowerBuilder,开发网页选用HTML/Javascript/PHP/ASP.NET等语言。
Java,面向对象、安全、跨平台、强大稳健、流行的程序设计语言与环境。由 Sun 公司开发,语言风格较为接近 C++ 与 C# ,而最为人熟知的便是跨平台性。Java 分为 JavaSE(标准版,面向初学者与桌面开发)、JavaEE(企业版,也称 J2EE,面向企业级开发、网络开发,包括了为人熟知的 JSP,并包含了 JavaSE 的所有内容)、JavaME(微型版,为手机、PDF、机顶盒、消费家电等嵌入设备开发),目前还有正在发展的 JavaFX(一种富Internet 应用程序开发的脚本语言)。
C++,应用最广泛、成熟、强大、复杂、流行的程序设计语言。目前正在使用的 Windows 或 Linux 操作系统的大部分内容均出自 C++ 的程序员之手,C++ 非常强大近乎无所不能,而 C++ 代码经过编译后将成为计算机的二进制代码的可执行程序,所以在兼容性、性能上均为优秀。当今如果你学习 C++,再配合 WIN32SDK、MFC 或是 .NET CLR,绝对是开发桌面程序的首选语言。从名字可以看出,C++ 改进自 C 语言,特别是面向对象方面的扩展。C++ 首选的集成开发环境(IDE)自然是 Visual C++。
C#,微软的 C# 就好似是 C++、Java、Delphi 与 Visual Basic 的结合体,是新兴、易学、强大的程序设计语言,它更像 Java完全面向对象,开发与运行都在 .NET Framework 环境中。使用微软强大的 Visual Studio 集成开发环境,这是快速开发 Windows 平台桌面应用程序的最好选择。C# 也可以开发 ASP.NET 的动态网页程序,这是曾经风火多年的 ASP 的替代产品。开发 C# 程序,使用微软的 Visual Studio 是最好的,也是几乎唯一的选择。
Python,新兴的面向对象脚本语言。Python 作为脚本语言,跨平台性非常好,几乎在所有操作系统中可以使用,可以进行桌面程序开发、动态网页开发、数据运算等。不需要担心商业授权、付费这些额外的问题,Python 本身就是免费软件、自由软件。
Ruby,较 Python 来说更新兴的面向对象脚本语言,由日本人开发。实质上它与 Python 是同类,具有共同的一些特性、脚本语言、面向对象、免费开源、简洁强大、跨平台性。Python 与 Ruby 都是目前的新兴流行脚本语言。
PHP,是目前最流行、强大、稳健的动态网页开发脚本语言。它的语言风格类似 C、Perl,可以集成在 HTML 网页代码只中,也遵循面向对象,并且易于学习。其实 PHP 还可以开发桌面应用程序,主要作为动态网页开发语言。目前最流行的开发环境组合就是 Linux + Apache HTTP Server + MySQL + PHP,简称为 LAMP。开发与学习推荐的 IDE 有 Zend Studio、Eclipse 甚至是 Dreamweaver。
Perl,最具成熟、灵活性的脚本语言。学习较为容易,但却非常强大。Python 语言的
第 页 共 页
Windows体系编程结课作业
许多特性便是有借鉴自 Perl。Perl 拥有一个大型的第三方代码库CPAN,极大的方便于程序人员的开发和使用。在官方网站下载 Perl 环境,所有的 Linux 系统都几乎集成了 Perl。脚本语言的开发都推荐在 Notepad++ 等高级文本编辑器中完成。
Pascal,曾经风靡全球的高级程序设计语言,特点是语言简明、结构严谨、较高灵活性,名气不下于 C++。国际信息学奥林匹克、中国信息技术奥林匹克竞赛的编程项目主要语言。
Basic,或称为 Basic 系列语言,主要有 QuickBasic、QBasic、VBScript、Visual Basic、Visual Basic .NET,甚至有适于儿童学习的 Small Basic。
二、线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消
息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒。
线程互斥是指对于共享的进程系统资源,在各单个线程访问时的排它性。当有若干个线程都要使用某一共享资源时,任何时刻最多只允许一个线程去使用,其它要使用该资源的线程必须等待,直到占用资源者释放该资源。
线程互斥可以看成是一种特殊的线程同步。
线程间的同步方法大体可分为两类:用户模式和内核模式。顾名思义,内核模式就是指利用系统内核对象的单一性来进行同步,使用时需要切换内核态与用户态,而用户模式就是不需要切换到内核态,只在用户态完成操作。用户模式下的方法有:原子操作(例如一个单一的全局变量),临界区。内核模式下的方法有:事件,信号量,互斥量。
原子操作(全局变量):
利用全局变量来进行线程间的同步,当子线程结束时改变该值,而父线程则循环判断该值来确认子线程是否已经结束,当子线程结束时,父线程才继续进行下面的操作。 临界区(Critical Section)保证在某一时刻只有一个线程能访问数据的简便办法。在任意时刻只允许一个线程对共享资源进行访问。如果有多个线程试图同时访问临界区,那么在有一个线程进入后其他所有试图访问此临界区的线程将被挂起,并一直持续到进入临界区的线程离开。临界区在被释放后,其他线程可以继续抢占,并以此达到用原子方式操作共享资源的目的。
临界区包含两个操作原语:EnterCriticalSection() 进入临界区LeaveCriticalSection() 离开临界区EnterCriticalSection()语句执行后代码将进入临界区以后无论发生什么,必须确保与之匹配的LeaveCriticalSection()都能够被执行到。否则临界区保护的共享资源将永远不会被释放。虽然临界区同步速度很快,但却只能用来同步本进程内的线程,而不可用来同步多个进程中的线程。
事件(Event)事件对象也可以通过通知操作的方式来保持线程的同步。并且可以实现不同进程中的线程同步操作。
信号量包含的几个操作原语:CreateEvent()创建一个信号量OpenEvent()打开一个事件SetEvent()回置事件WaitForSingleObject()等待一个事件
第 页 共 页
共分享92篇相关文档