當前位置:首頁 » 編程語言 » c語言數據消息隊列
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言數據消息隊列

發布時間: 2023-05-12 13:14:36

c語言:Windows Message Queue

消息隊列是Windows系統的基本基礎。 對於每一個過程中,系統維護一個消息隊列。 如果事情發生在這個過程中,如滑鼠單擊,文字的變化,系統將添加一條消息到隊列中。 同時,這一進程將做如何從根據消息隊列的優先順序值,如果它不是空的一個循環。 請注意以下優先順序值意味著更高的優先權。 在這個問題中,你被要求模擬消息隊列的消息隊列將消息發送到和獲得信息的。輸入只有一個輸入的測試為例。 每一行是一個命令,「GET」或「認沽」,這意味著獲得的消息,或將郵件。 如果該命令是「把」外,還有一個字元串是指消息的名稱和兩個整數表示參數和優先其次。 最多將有60000命令。 請注意,一個消息可以出現兩次或更多,如果兩個消息具有相同的優先順序,一來首先將首先處理。(即相同的優先順序的FIFO。)進程的最終文件。每個輸出為「 get「命令,該命令從輸出的名字和在同一行參數消息隊列中獲取。 如果有任何消息隊列中,輸出「空隊列!」。 有沒有命令輸出為「把」。樣品輸入獲得放置msg1 10 10 4 5將msg2獲得獲得獲得樣本輸出空隊列!msg2 10 msg1 10空隊列!

Ⅱ 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;

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

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

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

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

(3)c語言數據消息隊列擴展閱讀

循環隊列各個參數的含義

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

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

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

Ⅳ 怎樣在WINDOWS下用C語言編寫串口接收數據程序

#include
#include
int
main(void)
{
FILE
*fp;
char
temp;
char
buf[100];
if((fp
=
fopen("com3","r"))
==
NULL)
puts("this
way
doesn't
work!\n");
else
puts("this
way
works!\n");
while(1)
{
temp
=
0;
fscanf(fp,"%c",&temp);
if(temp
!=
0)
putchar(temp);
else
Sleep(100);
}
fclose(fp);
return
0;
}
以前弄的,好久沒看了,不知到對不對。
還有下面這段:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include
#include
HANDLE
hCom;
int
main(void)
{
hCom=CreateFile(TEXT("COM3"),//COM1口
GENERIC_READ|GENERIC_WRITE,
//允許讀和寫
0,
//獨占方式
NULL,
OPEN_EXISTING,
//打開而不是創建
0,
//同步方式
NULL);
if(hCom==(HANDLE)-1)
{
printf("打開COM失敗!\n");
return
FALSE;
}
else
{
printf("COM打開成功!\n");
}
SetupComm(hCom,1024,1024);
//輸入緩沖區和輸出緩沖區的大小都是1024
COMMTIMEOUTS
TimeOuts;
//設定讀超時
TimeOuts.ReadIntervalTimeout=1000;
TimeOuts.ReadTotalTimeoutMultiplier=500;
TimeOuts.ReadTotalTimeoutConstant=5000;
//設定寫超時
TimeOuts.WriteTotalTimeoutMultiplier=500;
TimeOuts.WriteTotalTimeoutConstant=2000;
SetCommTimeouts(hCom,&TimeOuts);
//設置超時
DCB
dcb;
GetCommState(hCom,&dcb);
dcb.BaudRate=9600;
//波特率為9600
dcb.ByteSize=8;
//每個位元組有8位
dcb.Parity=NOPARITY;
//無奇偶校驗位
dcb.StopBits=ONE5STOPBITS;
//兩個停止位
SetCommState(hCom,&dcb);
DWORD
wCount;//讀取的位元組數
BOOL
bReadStat;
while(1)
{
PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR);
//清空緩沖區
char
str[9]={0};
printf("%s\n",str);
bReadStat=ReadFile(hCom,str,9,&wCount,NULL);
if(!bReadStat)
{
printf("讀串口失敗!");
return
FALSE;
}
else
{
str[8]='\0';
printf("%s\n",str);
}
Sleep(100);
}
}
以上兩段代碼是一年前弄的,我記得可以用,你試試。

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


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

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

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

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

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

Ⅶ 關於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);

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

}

Ⅷ C語言 Error [1250] could not find space (125 bytes) for variable _shou

在任何重要的系統鍵困中,都會有需要不同的處理時間的元素。例如,載入一張圖片比應用過濾器花費更少的時間。消息隊列通過一個緩沖鋒兄層來幫助任務最高效率的執行--寫銀亮襲入隊列的處理會盡可能的快速,而不受從隊列讀的預備處理的約束。該緩沖有助於控制和優化數據流經過系統的速度。

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

鏈表和隊列可以用於"飯店點菜","ktv點歌",點好菜,"飯店點菜"的時候可以更新自己的訂菜信息或取消定單,先點先上;
棧可以用在"集裝箱貨物提取"中,新到的貨物很有可能壓在之前的貨物上,取貨物必須先拿下最上面的貨物,體現了所謂"後進先出"的思想,也可以用"從運鈔車中取錢"這些事情來體現棧