課程設(shè)計綜合實驗報告科院_第1頁
課程設(shè)計綜合實驗報告科院_第2頁
課程設(shè)計綜合實驗報告科院_第3頁
課程設(shè)計綜合實驗報告科院_第4頁
課程設(shè)計綜合實驗報告科院_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、.科 技 學(xué) 院課程設(shè)計報告( 20112012年度第 2 學(xué)期)名 稱: Windows體系編程 題 目: 課內(nèi)綜合實驗 院 系: 科技學(xué)院信息工程系班 級: 軟件09K2 學(xué) 號: 091909020221 學(xué)生姓名: 彭 奇 指導(dǎo)教師: 王新穎 實驗學(xué)時: 12學(xué)時 成 績: 日期: 2012 年 5 月 29 日.;實驗一 類windows進(jìn)程任務(wù)管理器實驗一、課程設(shè)計的目的與要求目的:理解Windows編程環(huán)境下的進(jìn)程管理機(jī)制,能創(chuàng)建一個完成特定功能的進(jìn)程,并能對進(jìn)程進(jìn)行信息的獲取、終止和保護(hù),實現(xiàn)一個類Windows的進(jìn)程任務(wù)管理器。要求:1. 編寫一段程序,能夠完成創(chuàng)建進(jìn)程的功能

2、,要求啟動windows記事本程序(notepad.exe),同時打開一個文本文件,路徑為:c:systemuser.log 。并打印出新建進(jìn)程ID。2. 獲取當(dāng)前系統(tǒng)進(jìn)程信息,打印輸出進(jìn)程名稱和ID號。3. 終止任意進(jìn)程并獲取退出代碼。二、設(shè)計正文#include "stdafx.h"#include <windows.h>#include <stdio.h>#include <tlhelp32.h> / 聲明快照函數(shù)的頭文件BOOL TerminateProcessFromId(DWORD dwId)BOOL bRet = FALSE

3、;/ 打開目標(biāo)進(jìn)程,取得進(jìn)程句柄HANDLE hProcess = :OpenProcess (PROCESS_ALL_ACCESS, FALSE, dwId); /PROCESS_ALL_ACCESS:所有權(quán)限,包括創(chuàng)建、讀、寫等。/OpenProcess如果成功,則該進(jìn)程內(nèi)核對象引用計數(shù)+1if(hProcess != NULL)bRet = :TerminateProcess(hProcess, 0);CloseHandle(hProcess);/結(jié)束了進(jìn)程,還要使該進(jìn)程內(nèi)核對象引用計數(shù)-1return bRet;int main(int argc, char* argv)char sz

4、CommandLine = "notepad "STARTUPINFO si = sizeof(si) ;PROCESS_INFORMATION pi;si.dwFlags = STARTF_USESHOWWINDOW;/ 指定wShowWindow成員有效si.wShowWindow = TRUE;/ 此成員設(shè)為TRUE的話則顯示新建進(jìn)程的主口, / 為FALSE的話則不顯示BOOL bRet = :CreateProcess (NULL,/ 不在此指定可執(zhí)行文件的文件名szCommandLine,/ 命令行參數(shù)NULL,/ 默認(rèn)進(jìn)程安全性NULL,/ 默認(rèn)線程安全性FA

5、LSE,/ 指定當(dāng)前進(jìn)程內(nèi)的句柄不可以被子進(jìn)程繼承CREATE_NEW_CONSOLE,/ 為新進(jìn)程創(chuàng)建一個新的控制臺窗口NULL,/ 使用本進(jìn)程的環(huán)境變量NULL,/ 使用本進(jìn)程的驅(qū)動器和目錄&si,&pi);if(bRet)/ 既然我們不使用兩個句柄,最好是立刻將它們關(guān)閉:CloseHandle (pi.hThread);:CloseHandle (pi.hProcess);printf(" 新進(jìn)程的進(jìn)程ID號:%d n", pi.dwProcessId);printf(" 新進(jìn)程的主線程ID號:%d n", pi.dwThreadI

6、d);PROCESSENTRY32 pe32;/ 在使用這個結(jié)構(gòu)之前,先設(shè)置它的大小pe32.dwSize = sizeof(pe32); / 給系統(tǒng)內(nèi)的所有進(jìn)程拍一個快照HANDLE hProcessSnap = :CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);if(hProcessSnap = INVALID_HANDLE_VALUE)printf(" CreateToolhelp32Snapshot調(diào)用失??! n");return -1;BOOL bMore = :Process32First(hProcessSnap

7、, &pe32);/ 遍歷快照,輪流顯示每個進(jìn)程的信息while(bMore)printf(" 進(jìn)程名稱:%s n", pe32.szExeFile);printf(" 進(jìn)程ID號:%u nn", pe32.th32ProcessID);bMore = :Process32Next(hProcessSnap, &pe32);/ 不要忘記清除掉snapshot對象:CloseHandle(hProcessSnap);DWORD dwId;printf(" 請輸入您要終止的進(jìn)程的ID號: n");scanf("%

8、u", &dwId);if(TerminateProcessFromId(dwId)printf(" 終止進(jìn)程成功! n");elseprintf(" 終止進(jìn)程失??! n");return 0;實驗結(jié)果: 實驗二 窗口與DLL實驗一、實驗?zāi)康呐c要求: 目的:了解windows窗口程序的結(jié)構(gòu)與特點,了解windows程序中至關(guān)重要的消息機(jī)制,包括消息的定義、消息循環(huán)以及消息相應(yīng)函數(shù)。熟悉基本的WINAPI,了解DLL的使用方法。 要求:1.利用WIN32API編寫WinMain函數(shù),完成窗口類的注冊,窗口的創(chuàng)建,顯示,更新,并完成消息循環(huán)

9、過程。2.利用windows API實現(xiàn)窗口過程函數(shù)LRESULT CALLBACK WinProc( ),對WM_CHAR、WM_PAINT、WM_CLOSE、WM_DESTROY消息進(jìn)行響應(yīng),并對默認(rèn)消息進(jìn)行響應(yīng)。其中,對WM_PAINT的響應(yīng)要完成窗口重繪,WM_CLOSE響應(yīng)完成關(guān)閉窗口,WM_DESTROY完成銷毀應(yīng)用程序。3.在對WM_LBUTTONDOWN消息函數(shù)中,通過調(diào)用DLL完成對該消息的響應(yīng),實現(xiàn)彈出顯示鼠標(biāo)點擊位置對話框的功能。二、設(shè)計正文#include <stdio.h>#include "stdafx.h"/ 窗口函數(shù)的函數(shù)原形LR

10、ESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)char szClassName = "MainWClass"WNDCLASSEX wndclass;/ 用描述主窗口的參數(shù)填充WNDCLASSEX結(jié)構(gòu)wndclass.cbSize = sizeof(wndclass);/ 結(jié)構(gòu)的大小wndclass.style = CS_

11、HREDRAW|CS_VREDRAW;/ 指定如果大小改變就重畫wndclass.lpfnWndProc = MainWndProc;/ 窗口函數(shù)指針wndclass.cbClsExtra = 0;/ 沒有額外的類內(nèi)存wndclass.cbWndExtra = 0;/ 沒有額外的窗口內(nèi)存wndclass.hInstance = hInstance;/ 實例句柄 wndclass.hIcon = :LoadIcon(NULL, IDI_APPLICATION);/ 使用預(yù)定義圖標(biāo)wndclass.hCursor = :LoadCursor(NULL,IDC_ARROW);/ 使用預(yù)定義的光標(biāo)wn

12、dclass.hbrBackground = (HBRUSH):GetStockObject(WHITE_BRUSH);/ 使用白色背景畫刷wndclass.lpszMenuName = NULL;/ 不指定菜單wndclass.lpszClassName = szClassName ;/ 窗口類的名稱wndclass.hIconSm = NULL;/ 沒有類的小圖標(biāo)/ 注冊這個窗口類:RegisterClassEx(&wndclass); / 創(chuàng)建主窗口HWND hwnd = :CreateWindowEx( 0,/ dwExStyle,擴(kuò)展樣式szClassName,/ lpCla

13、ssName,類名"My first Window!",/ lpWindowName,標(biāo)題WS_OVERLAPPEDWINDOW,/ dwStyle,窗口風(fēng)格CW_USEDEFAULT,/ X,初始 X 坐標(biāo)CW_USEDEFAULT,/ Y,初始 Y 坐標(biāo)CW_USEDEFAULT,/ nWidth,寬度CW_USEDEFAULT,/ nHeight,高度NULL,/ hWndParent,父窗口句柄NULL,/ hMenu,菜單句柄hInstance,/ hlnstance,程序?qū)嵗浔鶱ULL) ;/ lpParam,用戶數(shù)據(jù)if(hwnd = NULL):Messa

14、geBox(NULL, "創(chuàng)建窗口出錯!", "error", MB_OK);return -1;/ 顯示窗口,刷新窗口客戶區(qū):ShowWindow(hwnd, nCmdShow);:UpdateWindow(hwnd);/ 從消息堆中取出消息MSG msg;while(:GetMessage(&msg,NULL, 0, 0)/ 轉(zhuǎn)化鍵盤消息:TranslateMessage(&msg);/ 將消息發(fā)送到相應(yīng)的窗口函數(shù):DispatchMessage(&msg);/ 當(dāng)GetMessage返回0時程序結(jié)束return msg.wP

15、aram;LRESULT CALLBACK MainWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)char szText = "最簡單的窗口程序!"switch (message) case WM_PAINT: / 窗口客戶區(qū)需要重畫HDC hdc;PAINTSTRUCT ps;/ 使無效的客戶區(qū)變的有效,并取得設(shè)備環(huán)境句柄hdc = :BeginPaint (hwnd, &ps) ;/ 顯示文字:TextOut(hdc, 10, 10, szText, strlen(szText);:E

16、ndPaint(hwnd, &ps);return 0;case WM_CHAR:char szChar20;sprintf(szChar,"char is %d",wParam);MessageBox(hwnd,szChar,"Windows",MB_OK);break;case WM_LBUTTONDOWN:MessageBox(hwnd,"mouse clicked","message",0);HDC hdc;hdc=GetDC(hwnd);TextOut(hdc,0,50,"Windows

17、 program",strlen("Windows program");ReleaseDC(hwnd,hdc); break;case WM_CLOSE:if(IDYES=MessageBox(hwnd,"是否退出程序?","Windows",MB_YESNO)DestroyWindow(hwnd);case WM_DESTROY: / 正在銷毀窗口/ 向消息隊列投遞一個WM_QUIT消息,促使GetMessage函數(shù)返回0,結(jié)束消息循環(huán):PostQuitMessage(0) ;return 0 ;/ 將我們不處理的消息交給

18、系統(tǒng)做默認(rèn)處理return :DefWindowProc(hwnd, message, wParam, lParam);結(jié)果顯示:三、課程設(shè)計總結(jié)或結(jié)論實驗三 用多線程方法解決哲學(xué)家就餐問題吧1、 實驗?zāi)康呐c要求目的:理解Windows編程環(huán)境下的線程同步機(jī)制,掌握線程同步的方法,包括臨界區(qū)對象、事件內(nèi)核對象、互鎖函數(shù)等方法,并能用線程同步解決經(jīng)典的線程同步問題,體會多線程編程。要求:1)為每個哲學(xué)家產(chǎn)生一個線程,設(shè)計正確的同步算法2)每個哲學(xué)家取得一雙筷子開始用餐后,即時顯示“Dining”和該哲學(xué)家的自定義 標(biāo)識符以及餐桌上所有幾位哲學(xué)家標(biāo)識符及其所坐的位置。3)設(shè)定共有5個哲學(xué)家需用餐。

19、每位用餐耗時10秒鐘以上。4)多個哲學(xué)家須共享操作函數(shù)代碼二、設(shè)計正文#include<windows.h>#include<process.h>#include<iostream>using namespace std;HANDLE g_chops5;UINT WINAPI Philo(PVOID pvParam)int n = atoi(char *) pvParam);if(n%2=1)for(int i=0;i<5;i+):WaitForSingleObject(g_chopsn-1,INFINITE);:WaitForSingleObject

20、(g_chopsn,INFINITE);cout<<n<<" is dinning."<<endl<<endl;:Sleep(10000);cout<<n<<" finished!"<<endl<<endl;:SetEvent(g_chopsn);:SetEvent(g_chopsn-1);elsefor(int i=0;i<5;i+):WaitForSingleObject(g_chopsn,INFINITE);:WaitForSingleObject(g_chopsn-1,INFINITE);cout<<n<<" is dinning."<&

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論