?? 消息循環與多任務.txt
字號:
實驗一:
WINDOWS編程 進程(虛擬處理機,多任務處理)
例1:事件驅動程序設計
消息 :用戶發送的消息(鼠標、鍵盤),程序自身發送的消息,系統發送的消息
typedef struct tagMSG
{
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
} MSG;
主要是message 見<winuser.h>
WM_SIZE
WM_USER
BM
CB
DM
EM
LB
SBM
WM
用戶定義內部消息0x0400 0x07ff
用戶定義外部消息 0xc000 0xffff
RegisterWindowMessage()
消息泵:循環--------接受消息,預處理,發送給不同的消息處理函數去處理消息
messwhile_32
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
MSG msg;
HACCEL hAccelTable;
// Initialize global strings
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_MESSWHILE_32, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);
// Perform application initialization:
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}
hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_MESSWHILE_32);
// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam;
}
合作的多任務處理
如果使用合作的多任務處理,每個程序必須允許其他程序使用CPU。使用合作的多任務處理系統的應用軟件都有一個特殊的碼環,這個碼環產生控制允許其他應用軟件的運行。如果每個人都按規則辦事,這種方法會工作得相當好,但是當應用程序不服從這一規則時,他“霸占”CPU。這意味著,終端用戶不能轉向其他應用程序,使操作系統或應用程序出現“掛起”
有優先權的多任務處理
在有優先權的多任務處理中,操作系統安排CPU時間,一個應用軟件在任何時候都有可能被操作系統暫停(先占)。這減輕了“一玩到底”的程序問題,因為操作系統負責分給每個應用軟件自己的時間片。
Windows 95對于32位Windows應用程序采用有優先權的多任務處理,為了能夠向下兼容,對于16位的Windows應用程序(為Windows 3.x寫的應用程序)仍采用合作的多任務處理。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -