當前位置:首頁 » 編程語言 » c語言消息隊列

c語言消息隊列

發布時間: 2022-07-19 10:54:53

c語言的switch(Msg)

WNDCLASSEX是一個包含窗體各種參數的結構體,例如窗口風格(是模態、非模態、有無系統菜單、有無邊框等等),窗體實例句柄,窗體消息處理函數等等.
WNDCLASSEX在winuser.h中被定義
typedef WNDCLASSEXW WNDCLASSEX,*LPWNDCLASSEX,*PWNDCLASSEX;
而WNDCLASSEXW也在winuser.h中被定義為:
typedef struct _WNDCLASSEXW {
UINT cbSize;//WNDCLASSEX 的大小
UINT style;//窗口風格
WNDPROC lpfnWndProc;//窗體消息處理函數的指針
int cbClsExtra;//緊跟在窗口類結構後的附加位元組數
int cbWndExtra;//跟在窗口實例後的附加位元組數
HINSTANCE hInstance;//窗體實例句柄
HICON hIcon;//窗體圖標句柄
HCURSOR hCursor;//游標句柄
HBRUSH hbrBackground;//背景畫刷背景
LPCWSTR lpszMenuName;//菜單名的const wchar_t類型的指針
LPCWSTR lpszClassName;//類名的const wchar_t類型的指針
HICON hIconSm;//和窗口類關聯的小圖標
} WNDCLASSEXW, *LPWNDCLASSEXW, *PWNDCLASSEXW;

HWND是窗體的句柄類型
在windef.h中被定義
DECLARE_HANDLE(HWND);
而在winnt中有#define DECLARE_HANDLE(n) typedef HANDLE n
和#define DECLARE_HANDLE(n) typedef struct n##__{int i;}*n

MSG是Windows消息的結構體,當產生消息時被推送到消息隊列,等待處理,例如右擊時會生成右擊消息的MSG,消息會記錄接收消息的窗體的句柄,和消息類型:WM_RBUTTONDOWN,消息產生時的滑鼠的坐標,把消息投遞到消息隊列,Windows會把消息一條條地取出,根據接收者投遞給它們的消息處理函數
LRESULT CALLBACK WindowProcere (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
witch (message)
{
...
}
}

MSG在winuser.h中被定義為
typedef struct tagMSG {
HWND hwnd;//接收消息的窗體的句柄
UINT message;//消息ID, 例如WM_CLOSE、WM_MOUSEMOVE
WPARAM wParam;//消息參數, 含義隨message的不同而不同
LPARAM lParam;//消息參數, 含義隨message的不同而不同
DWORD time;//消息投遞到消息隊列的時間
POINT pt;//產生消息時滑鼠的坐標
} MSG,*LPMSG,*PMSG;

Ⅱ aix系統,c語言,發送消息隊列返回報錯error=11

當發送端速度超過接收端時,隊列可能填滿。IPC_NOWAIT說明發送端是無阻塞的,這時就會臨時返回失敗。可以等一段時間再次調用msgsnd。

Ⅲ C語言鏈表和棧,還用隊列分別用於什麼場合,請專業人士具體解說一下!

通常鏈表支持線性時間查找,線性時間訪問,常數時間插入,常數時間刪除,比較適合需要多次在中間插入和刪除的場合
棧(stack)遵循先進後出原則(FILO),可用於模擬倉儲,遞歸,深搜等其他符合FILO的模型
隊列(queue)遵循先進先出原則(FIFO),可用於模擬排隊,流,消息隊列等符合FIFO的模型

其他具體情況就要視需要而定了

Ⅳ C語言中,隊列是什麼意思,有什麼用途

隊列是一種特殊的線性表。

隊列一種可以實現「先進先出」的存儲結構,即「一端入,一端出」,隊首(front)出隊,隊尾(rear)入隊,若front指向隊首,則rear指向隊尾最後一個有效元素的下一個元素;若rear指向隊尾,則front指向隊首第一個有效元素的下一個元素。

隊列特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作,和棧一樣,隊列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。

(4)c語言消息隊列擴展閱讀

循環隊列各個參數的含義

1、隊列初始化front和rear的值都是零,初始化時隊列就是空的。

2、隊列非空front代表隊列的第一個元素rear代表了最後一個有效元素的下一個元素。

3、隊列空front和rear的值相等,但是不一定是零。

Ⅳ 關於c語言中消息隊列發送的結構體

消息隊列正常定義的type類型就是long,你看看是不是你定義的有問題。

#include<sys/types.h>

#include<sys/ipc.h>

#include<sys/msg.h>

#include<stdio.h>

struct msgbuf

{

long type;//類型

char buf[1024];

};

int main()

{

int msgid;

msgid=msgget(0x1000,IPC_CREAT | 0777);

struct msgbuf mb={1,"hello world"};

int ret;

ret=msgsnd(msgid,&mb,sizeof(struct msgbuf)-sizeof(long),0);

//這里的長度不包括類型的大小

}

linux c語言進程間通信疑問,上述程序只是想父進程創建一個消息隊列,發給子進程消息,但是為什麼沒有成功


if((msgid=msgget(IPC_PRIVATE,0666))==-1)
{
printf("error111");
exit(0);
}
放到fork()函數之前就可以了。

創建消息隊列需要在fork()之前,因為fork()產生的是兩個進程,他們的資源是相互獨立的。

fork()之後創建的消息隊列,另一個進程不能識別。

Ⅶ C語言中postmessage的參數是什麼,有沒有使用的例子

函數原型:B00L PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam); 函數功能:該函數將一個消息放入(寄送)到與指定窗口創建的線程相聯系消息隊列里,不等待線程處理消息就返回,是非同步消息模式。消息隊列里的消息通過調用GetMessage和PeekMessage取得。參數: hWnd:其窗口程序接收消息的窗口的句柄。可取有特定含義的兩個值:
HWND.BROADCAST:消息被寄送到系統的所有頂層窗口,包括無效或不可見的非自身擁有的窗口、被覆蓋的窗口和彈出式窗口。消息不被寄送到子窗口。
NULL:此函數的操作和調用參數dwThread設置為當前線程的標識符PostThreadMessage函數一樣。
Msg:指定被寄送的消息。
wParam:指定附加的消息特定的信息。
IParam:指定附加的消息特定的信息。

Ⅷ C語言自定義消息函數的等待怎麼寫

消息隊列的等待就是GetMessage,沒辦法自己寫,除非你打算改Windows本身。這個函數如果沒有消息進來就會釋放CPU,如果不希望等待用PeekMessage。消息循環的格式是固定的。

熱點內容
aspx腳本 發布:2025-02-01 06:44:13 瀏覽:999
訪問策略更新 發布:2025-02-01 06:39:29 瀏覽:498
pythoneditplus 發布:2025-02-01 06:31:57 瀏覽:275
bmp轉png源碼 發布:2025-02-01 06:30:08 瀏覽:470
魔獸聯盟人多的伺服器是什麼 發布:2025-02-01 06:25:25 瀏覽:41
c語言字元串子串刪除 發布:2025-02-01 06:25:23 瀏覽:534
怎麼改電腦鎖屏密碼 發布:2025-02-01 06:16:55 瀏覽:472
存儲卡不能格式化怎麼辦 發布:2025-02-01 06:02:55 瀏覽:691
scratch編程網站 發布:2025-02-01 05:51:27 瀏覽:396
安卓怎麼更好用 發布:2025-02-01 05:45:38 瀏覽:147