版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、科 技 學(xué) 院課程設(shè)計(jì)(綜合實(shí)驗(yàn))報(bào)告( 2015- 2016年度第 2 學(xué)期)名 稱: Windows體系編程 題 目: 課內(nèi)綜合實(shí)驗(yàn) 院 系: 信息工程系 班 級: 學(xué) 號: 學(xué)生姓名: 指導(dǎo)教師: 實(shí)驗(yàn)學(xué)時(shí): 成 績: 日期: 2016 年 6 月 6 日實(shí)驗(yàn)一 類Windows進(jìn)程任務(wù)管理器實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?理解Windows編程環(huán)境下的進(jìn)程管理機(jī)制,能創(chuàng)建一個(gè)完成特定功能的進(jìn)程,并能對進(jìn)程進(jìn)行信息的獲取、終止和保護(hù),實(shí)現(xiàn)一個(gè)類Windows的進(jìn)程任務(wù)管理器二、實(shí)驗(yàn)要求 程序可為控制臺或帶界面應(yīng)用程序,要求有較好的用戶體驗(yàn),完成功能:1. 能夠完成創(chuàng)建進(jìn)程的功能,打印輸出新建進(jìn)程ID。
2、2. 獲取當(dāng)前系統(tǒng)進(jìn)程信息,列出可選顯示進(jìn)程信息項(xiàng),根據(jù)選擇顯示輸出進(jìn)程信息。3. 終止任意進(jìn)程并獲取退出代碼。4. 具體實(shí)現(xiàn)技術(shù)不限三、實(shí)驗(yàn)原理(1)進(jìn)程的創(chuàng)建進(jìn)程的創(chuàng)建通過CreateProcess()函數(shù)來實(shí)現(xiàn),CreateProcess()通過創(chuàng)建一個(gè)新的進(jìn)程及在其地址空間內(nèi)運(yùn)行的主線程來啟動(dòng)并運(yùn)行一個(gè)新的程序。具體地,在執(zhí)行CreateProcess()函數(shù)時(shí),首先由操作系統(tǒng)負(fù)責(zé)創(chuàng)建一個(gè)進(jìn)程內(nèi)核對象,初始化計(jì)數(shù)為1,并立即為新進(jìn)程創(chuàng)建一塊虛擬地址空間。隨后將可執(zhí)行文件或其他任何必要的動(dòng)態(tài)鏈接庫文件的代碼和數(shù)據(jù)裝載到該地址空間中。在創(chuàng)建主線程時(shí),也是首先由系統(tǒng)負(fù)責(zé)創(chuàng)建一個(gè)線程內(nèi)核對象,
3、并初始化為1。最后啟動(dòng)主線程并執(zhí)行進(jìn)程的入口函數(shù)WinMain(),完成對進(jìn)程和執(zhí)行線程的創(chuàng)建。CreateProcess()函數(shù)的原型聲明如下:BOOL CreateProcess(LPCTSTR lpApplicationName, / 可執(zhí)行模塊名LPTSTR lpCommandLine, / 命令行字符串LPSECURITY_ATTRIBUTES lpProcessAttributes, / 進(jìn)程的安全屬性 LPSECURITY_ATTRIBUTES lpThreadAttributes, / 線程的安全屬性 BOOL bInheritHandles, / 句柄繼承標(biāo)志 DWORD d
4、wCreationFlags, / 創(chuàng)建標(biāo)志 LPVOID lpEnvironment, / 指向新的環(huán)境塊的指針 LPCTSTR lpCurrentDirectory, / 指向當(dāng)前目錄名的指針 LPSTARTUPINFO lpStartupInfo, / 指向啟動(dòng)信息結(jié)構(gòu)的指針 LPPROCESS_INFORMATION lpProcessInformation / 指向進(jìn)程信息結(jié)構(gòu)的指針 );(2)進(jìn)程的獲取進(jìn)程的定義是為執(zhí)行程序指令的線程而保留的一系列資源的集合。進(jìn)程是一個(gè)可執(zhí)行的程序,由私有虛擬地址空間、代碼、數(shù)據(jù)和其他操作系統(tǒng)資源(如進(jìn)程創(chuàng)建的文件、管道、同步對象等)組成。進(jìn)程是一
5、些所有權(quán)的集合,一個(gè)進(jìn)程擁有內(nèi)存、CPU運(yùn)行時(shí)間等一系列資源,為線程的運(yùn)行提供一個(gè)環(huán)境,每個(gè)進(jìn)程都有它自己的地址空間和動(dòng)態(tài)分配的內(nèi)存、線程、文件和其他一些模塊。系統(tǒng)快照的獲取可以通過Win32 API函數(shù)CreateToolhelp32Snapshot()來完成,通過該函數(shù)不僅可以獲取進(jìn)程的快照,同樣可以獲取堆、模塊和線程的系統(tǒng)快照。函數(shù)的聲明如下:HANDLE WINAPI CreateToolhelp32Snapshot(DWORD dwFlags, /指定要?jiǎng)?chuàng)建包含哪一類系統(tǒng)信息的快照函數(shù)DWORD th32ProcessID /指定進(jìn)程的ID號,當(dāng)設(shè)定為0時(shí)表示指定當(dāng)前進(jìn)程);一旦系統(tǒng)
6、得到系統(tǒng)快照句柄,就可以對當(dāng)前的標(biāo)識號進(jìn)行枚舉,進(jìn)程號通過函數(shù)Process32First()和Procee32Next()得到,這兩個(gè)函數(shù)可以用于獲取系統(tǒng)快照中第一個(gè)和下一個(gè)系統(tǒng)的信息,這兩個(gè)函數(shù)的聲明如下:BOOL WINAPI Process32First(HANDLE hSnapshot, / 系統(tǒng)快照句柄LPPROCESSENTRY32 lppe / 指向結(jié)構(gòu)體PROCESSENTRY32的指針);BOOL WINAPI Process32Next(HANDLE hSnapshot, / 系統(tǒng)快照句柄LPPROCESSENTRY32 lppe / 指向結(jié)構(gòu)體PROCESSENTRY3
7、2的指針);(3)進(jìn)程的終止終止進(jìn)程也就是結(jié)束進(jìn)程,讓進(jìn)程從內(nèi)存中卸載。進(jìn)程的終止的原因一般有4種。1) 主線程的入口函數(shù)返回。2) 進(jìn)程中的一個(gè)線程調(diào)用ExitProcess函數(shù)。3) 次進(jìn)程中的所有線程結(jié)束。4) 其他進(jìn)程中又有線程都結(jié)束。要結(jié)束當(dāng)前進(jìn)程一般讓主線程的入口函數(shù)返回。當(dāng)用戶的程序入口函數(shù)返回的時(shí)候,啟動(dòng)函數(shù)會調(diào)用C/C+運(yùn)行期退出函數(shù)EXIT,并將用戶的返回值傳遞給它。EXTI函數(shù)會銷毀所有全局的或靜態(tài)的C+對象,然后調(diào)用系統(tǒng)函數(shù)ExitProcess促使操作系統(tǒng)終止應(yīng)用程序。ExitProcess是一個(gè)API函數(shù),它會結(jié)束當(dāng)前應(yīng)用程序的執(zhí)行,并設(shè)置退出代碼,函數(shù)聲明如下:V
8、oid ExitProcess(UINT uExitCode); /參數(shù)uExitCode為此程序的退出代碼 四、實(shí)驗(yàn)所需儀器、設(shè)備、材料(試劑)Windows操作系統(tǒng),Microsoft Visual c+6.0或.NET環(huán)境,msdn幫助文檔。五、實(shí)驗(yàn)正文/ 02CreateProcess.cpp文件/#include "stdafx.h"#include <windows.h>#include <stdio.h>#include <tlhelp32.h> / 聲明快照函數(shù)的頭文件int CreateProcess()char szC
9、ommandLine = "notepad c:user.log"STARTUPINFO si = sizeof(si) ;/si.cb 賦值為 sizeof(si),該結(jié)構(gòu)其余字段則全部初始化為零PROCESS_INFORMATION pi;/指向進(jìn)程信息結(jié)構(gòu)的指針 si.dwFlags = STARTF_USESHOWWINDOW;/ 指定wShowWindow成員有效si.wShowWindow = TRUE;/ 此成員設(shè)為TRUE的話則顯示新建進(jìn)程的主窗口,/ 為FALSE的話則不顯示BOOL bRet = :CreateProcess (NUL
10、L,/ 不在此指定可執(zhí)行文件的文件名szCommandLine,/ 命令行參數(shù)NULL,/ 默認(rèn)進(jìn)程安全性NULL,/ 默認(rèn)線程安全性FALSE,/ 指定當(dāng)前進(jìn)程內(nèi)的句柄不可以被子進(jìn)程繼承CREATE_NEW_CONSOLE,/ 為新進(jìn)程創(chuàng)建一個(gè)新的控制臺窗口NULL,/ 使用本進(jìn)程的環(huán)境變量NULL,/ 使用本進(jìn)程的驅(qū)動(dòng)器和目錄&si,&pi);if(bRet)/ 既然我們不使用兩個(gè)句柄,最好是立刻將它們關(guān)閉:CloseHandle (pi.hThread);:CloseHandle (pi.hProcess);printf(" 新進(jìn)程的進(jìn)程ID號:%d n&quo
11、t;, pi.dwProcessId);新進(jìn)程句柄printf(" 新進(jìn)程的主線程ID號:%d n", pi.dwThreadId);返回全局變量標(biāo)識符return 0;int ListProcess()PROCESSENTRY32 pe32;/ 在使用這個(gè)結(jié)構(gòu)之前,先設(shè)置它的大小pe32.dwSize = sizeof(pe32); / 給系統(tǒng)內(nèi)的所有進(jìn)程拍一個(gè)快照HANDLE hProcessSnap = :CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);if(hProcessSnap = INVALID_HANDLE_V
12、ALUE)printf("CreateToolhelp32Snapshot調(diào)用失敗n");return -1;/ 遍歷進(jìn)程快照,輪流顯示每個(gè)進(jìn)程的信息BOOL bMore = :Process32First(hProcessSnap, &pe32);while(bMore)printf(" 進(jìn)程名稱:%s n", pe32.szExeFile);printf(" 進(jìn)程ID號:%u nn", pe32.th32ProcessID);bMore = :Process32Next(hProcessSnap, &pe32);/
13、 不要忘記清除掉snapshot對象:CloseHandle(hProcessSnap);return 0;BOOL TerminateProcessFromId(DWORD dwId)/shanchujinchengBOOL bRet = FALSE;/ 打開目標(biāo)進(jìn)程,取得進(jìn)程句柄HANDLE hProcess = :OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwId);if(hProcess != NULL)/ 終止進(jìn)程/GetExitCodeProcess(hProcess, &ExitCode); bRet = :TerminateProce
14、ss(hProcess, 0);CloseHandle(hProcess);return bRet;int TiminateProcess()DWORD dwId;printf(" 請輸入您要終止的進(jìn)程的ID號: n");scanf("%u", &dwId);if(TerminateProcessFromId(dwId)printf(" 終止進(jìn)程成功! n");elseprintf(" 終止進(jìn)程失??! n");return 0;int main(int argc, char* argv)int choice
15、;/while(1)printf("請選擇功能:n1.新建進(jìn)程n2.列出進(jìn)程表n3.終止進(jìn)程");scanf("%d",&choice);switch(choice)case 1:CreateProcess();break;case 2:ListProcess();break;case 3:TiminateProcess();break;return 0;運(yùn)行結(jié)果:6、 實(shí)驗(yàn)總結(jié) 在本次實(shí)驗(yàn)中,首先要熟悉進(jìn)程與線程的概念,之間的關(guān)系,知道一些函數(shù)的調(diào)用,雖然在編譯時(shí)出現(xiàn)了問題,在由于忽視了注釋的使用,值得高興的是最后都解決了,運(yùn)行出了結(jié)果。實(shí)驗(yàn)二
16、 用多線程同步方法解決哲學(xué)家就餐問題一、實(shí)驗(yàn)?zāi)康?理解Windows編程環(huán)境下的線程同步機(jī)制,掌握線程同步的方法,包括臨界區(qū)對象、事件內(nèi)核對象、互鎖函數(shù)等方法,并能用線程同步解決經(jīng)典的線程同步問題,體會多線程編程。二、實(shí)驗(yàn)要求 1. 為每個(gè)哲學(xué)家產(chǎn)生一個(gè)線程,設(shè)計(jì)正確的同步算法2. 每個(gè)哲學(xué)家取得一雙筷子開始用餐后,即時(shí)顯示“Dining”和該哲學(xué)家的自定義標(biāo)識符以及餐桌上所有幾位哲學(xué)家標(biāo)識符及其所坐的位置。3. 設(shè)定共有5個(gè)哲學(xué)家需用餐。每位用餐耗時(shí)10秒鐘以上。4. 多個(gè)哲學(xué)家須共享操作函數(shù)代碼5.最好有界面展示。三、實(shí)驗(yàn)原理本實(shí)驗(yàn)設(shè)計(jì)解決的是哲學(xué)家就餐問題,共有5個(gè)哲學(xué)家繞一個(gè)圓桌做在5
17、個(gè)位置上,他們每2個(gè)人中間有一只筷子,共5只筷子,只有當(dāng)每個(gè)哲學(xué)家取得他左右兩邊的筷子時(shí),哲學(xué)家才能開始就餐,其它時(shí)間,哲學(xué)家只能思考或等待筷子。為避免哲學(xué)家互相等待對方的筷子發(fā)生死鎖,因此,奇數(shù)座位的哲學(xué)家按先左后右的順序拿筷子,偶數(shù)座位的哲學(xué)家按先右后左的順序拿筷子。本課程設(shè)計(jì)針對5只筷子分別設(shè)置了5個(gè)事件內(nèi)核對象,以保證每只筷子每次只能被取得一次;針對每個(gè)哲學(xué)家,通過共享操作函數(shù)代碼,分別建立5個(gè)線程,以同步哲學(xué)家就餐。四、實(shí)驗(yàn)所需儀器、設(shè)備、材料(試劑)Windows操作系統(tǒng),Microsoft Visual c+6.0或.NET環(huán)境,msdn幫助文檔。五、實(shí)驗(yàn)正文/ 哲學(xué)家就餐.cp
18、p : Defines the entry point for the console application./#include "stdafx.h"#include <windows.h>#include <process.h>#include <iostream.h>HANDLE HChop5;CRITICAL_SECTION cs;void print(int num) :EnterCriticalSection(&cs); cout<<num<<"號哲學(xué)家"<<&q
19、uot;Dining."<<endl; :LeaveCriticalSection(&cs);UINT WINAPI ThreadProc(LPVOID Param)/線程的起始地址int number=*(int*)(Param); for(int i = 0; i < 5; i+) if(number%2=0)/number是偶數(shù) 先右后左 WaitForSingleObject(HChopnumber-1,INFINITE);/若為INFINITE,則線程一直被掛起,直到hHandle所指向的對象變?yōu)橛行盘枲顟B(tài)時(shí)為止。 WaitForSingleObj
20、ect(HChopnumber,INFINITE); print(number); Sleep(5*1000); SetEvent(HChopnumber-1); SetEvent(HChopnumber); else/先左后右 WaitForSingleObject(HChopnumber%5/標(biāo)識一個(gè)能夠支持被通知/未通知的內(nèi)核對象,INFINITE);/等待函數(shù)可使線程自愿進(jìn)入等待狀態(tài),直到一個(gè)特定的內(nèi)核對象變?yōu)橐淹ㄖ獱顟B(tài)為止 WaitForSingleObject(HChopnumber-1,INFINITE); print(number); Sleep(5*1000); SetEve
21、nt(HChopnumber%5); SetEvent(HChopnumber-1); return 0;int main(int argc, char* argv) HANDLE H5; int *p=new int5;:InitializeCriticalSection(&cs);/臨界區(qū)鎖 cs指向臨界區(qū)對象for(int i=0;i<5;i+) pi=i+1;/Hi=CreateThread(NULL/形態(tài)結(jié)構(gòu)指針忽略為空, 0/初始堆棧默認(rèn)0 1mb,ThreadProc/指向線程函數(shù)的指標(biāo), &pi/傳遞給ThreadProc的參數(shù)。這樣主線程和從屬線程就可以
22、共享數(shù)據(jù), 0,&dwThreadId/返回線程的ID);Hi = (HANDLE)_beginthreadex(NULL/安全屬性,NULL為默認(rèn)安全屬性, 0/線程堆棧大小和創(chuàng)建它的線程的相同, ThreadProc/線程調(diào)用執(zhí)行的函數(shù)地址, &pi, CREATE_SUSPENDED/線程初始狀態(tài) 懸掛, NULL/用來記錄線程ID的地址);HChopi=CreateEvent(NULL, FALSE/自動(dòng)復(fù)位變成無信號, FALSE/初始狀態(tài)無信號, NULL/事件對象的名稱);for(int j=0;j<5;j+)SetEvent(HChopj);/成功返回非0
23、 ResumeThread(Hj);/繼續(xù)掛起線程 WaitForMultipleObjects(5/句柄的數(shù)量,H/句柄數(shù)組的指針,TRUE/等待所以信號量有效執(zhí)行,INFINITE/永不超時(shí)); for(int k=0;k<5;k+)CloseHandle(Hk);CloseHandle(HChopk); :DeleteCriticalSection(&cs); return 0;運(yùn)行結(jié)果:6、 實(shí)驗(yàn)總結(jié) 首先了解科學(xué)家就餐算法,才能有一定的邏輯觀念,函數(shù)的編寫才能符合邏輯觀念。實(shí)驗(yàn)三 簡易繪圖器一、實(shí)驗(yàn)?zāi)康?該實(shí)驗(yàn)為綜合實(shí)驗(yàn),通過該實(shí)驗(yàn),使學(xué)生學(xué)習(xí)使用visual c+進(jìn)行
24、簡單的綜合功能的系統(tǒng)開發(fā)。鞏固Windows編程的基礎(chǔ)知識,增加學(xué)生的利用圖形子環(huán)境編程的綜合能力,包括界面設(shè)計(jì)能力、使用GDI,GDI+或WPF的能力等。二、實(shí)驗(yàn)要求 1.利用GDI,GDI+或WPF實(shí)現(xiàn)簡單繪圖器,選其中一種即可,編程環(huán)境不限。2.實(shí)現(xiàn)繪制線條、矩形、圓形,可改變線條或填充的顏色。三、實(shí)驗(yàn)原理Windows的圖形子系統(tǒng)經(jīng)歷了GDI、GDI+ 和WPF三個(gè)發(fā)展階段。1GDI傳統(tǒng)的GDI(Graphics Device Interface,圖形設(shè)備接口)是微軟隨Windows 1.0(1985年11月)推出的Windows基本圖形子系統(tǒng),用于與顯卡和顯示設(shè)備無關(guān)的圖形界面編程,
25、支持WYSIWYG(What You See Is What You Get,所見即所得)。2GDI+新式的GDI+是隨Windows XP(2001年10月)推出的GDI的改進(jìn)版,增加了混色、漸變畫刷、樣條曲線、矩陣變換、圖像處理、持久路徑等新功能,GDI+也是.NET框架中Windows 3WPF隨Windows Vista和.NET框架3.0(2006年11月)微軟又推出了全新的Windows圖形子系統(tǒng)WPF(Windows Presentation Foundation,視窗展示基礎(chǔ)),它統(tǒng)一了桌面和瀏覽器等客戶端應(yīng)用程序的圖形界面,基于DirectX和.NET框架,采用聲明式XAML
26、進(jìn)行界面設(shè)計(jì),是Windows的下一代GUI顯示系統(tǒng)。XAML(eXtensible Application Markup Language,可擴(kuò)展應(yīng)用程序標(biāo)記語言)是一種基于XML(eXtensible Markup Language,可擴(kuò)展標(biāo)記語言,一種由萬維網(wǎng)協(xié)會定義的通用數(shù)據(jù)描述語言)的用戶界面標(biāo)記語言,用于定義UI元素、數(shù)據(jù)綁定、事件和其他特性。四、實(shí)驗(yàn)所需儀器、設(shè)備、材料(試劑)Windows操作系統(tǒng),Microsoft Visual c+6.0或.NET環(huán)境,msdn幫助文檔。五、實(shí)驗(yàn)正文using System;using System.Collections.Generic;using System.ComponentModel;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版道路標(biāo)識標(biāo)線設(shè)計(jì)與施工合同
- 2025至2031年中國防滑地毯行業(yè)投資前景及策略咨詢研究報(bào)告
- 二零二五年度家用電器全國總經(jīng)銷合作協(xié)議書2篇
- 2025年竹芒藤工藝制品項(xiàng)目可行性研究報(bào)告
- 教科版高中信息技術(shù)必修說課稿-3.3.2 利用人工智能技術(shù)加工信息
- 2025至2031年中國負(fù)壓表行業(yè)投資前景及策略咨詢研究報(bào)告
- 2024電商企業(yè)智能倉儲物流系統(tǒng)合同3篇
- 旅游產(chǎn)品開發(fā)合同
- 2024環(huán)保型工業(yè)涂裝生產(chǎn)線租賃合同
- 2025至2031年中國羊角旋轉(zhuǎn)安全鉤行業(yè)投資前景及策略咨詢研究報(bào)告
- 倉庫盤點(diǎn)培訓(xùn)資料
- (已壓縮)礦產(chǎn)資源儲量技術(shù)標(biāo)準(zhǔn)解讀300問-1-90
- 《戶用光伏發(fā)電系統(tǒng)技術(shù)導(dǎo)則》
- 《阿爾茨海默病康復(fù)》課件
- 2022-2023學(xué)年福建省泉州市惠安縣三年級(上)期末數(shù)學(xué)試卷
- 校企聯(lián)合實(shí)驗(yàn)室的運(yùn)營與維護(hù)
- 統(tǒng)編版語文2024-2025學(xué)年六年級上冊語文期末專題訓(xùn)練:字音字形(有答案)
- 機(jī)器人課件模板下載
- 江蘇省蘇州市2023-2024學(xué)年高二上學(xué)期期末學(xué)業(yè)質(zhì)量陽光指標(biāo)調(diào)研試題 物理 含答案
- 2024年安防監(jiān)控系統(tǒng)技術(shù)標(biāo)準(zhǔn)與規(guī)范
- 軟件正版化概念培訓(xùn)
評論
0/150
提交評論