24Windows消息队列

消息队列是 Windows 操作系统的基石。对于每个进程,系统维持了一个消息队列。如 果一个进程发生了某一事件,如单击鼠标,文本改变,系统将增加一个消息到队列里。同 时,如果队列里不是空的,那么,进程将一直循环地从队列里按优先值抓取消息。注意, 数值小意味着高的优先级。在本题中,要求你模拟消息队列,把消息放到消息队列中,或 从消息队列里抓取消息。
2.输入描述
只有一个测试案例。每行是一条命令,“GET”或“PUT”表示从消息队列里抓取消 息或把消息放入消息队列。如果是“ PUT”命令,后面跟着一个字符串(表示消息名称) 和两个整数(分别表示消息的参数和该消息的优先级)。案例中的命令最多达 60 000 条。 注意,一条命令可以重复出现多次,如果两条消息的优先级相同,先进入消息队列的那条 先被处理。(优先级相同的命令,是先进先出的。)一直处理到文件结尾。
3.输出描述
对于每条“GET”命令,直接输出它抓取的消息的名称和参数在一行上。如果消息队
列是空的,那么直接输出“EMPTY QUEUE!”。对于“PUT”命令,不需要输出什么。
4.输入样例
GET
PUT msg1 10 5
PUT msg2 10 4
GET
GET
GET
5.输出样例
EMPTY QUEUE!
msg2 10
msg1 10

EMPTY QUEUE! 

#include "stdafx.h"
#include<iostream>
#include<fstream>
#include<string>
#include<vector>
#include<algorithm>
#include<queue>
using namespace std;
struct task
{
	string content;
	int data;
	int priority;
	bool operator < (const task &t)const
	{
		return t.priority < priority;
	}
};
priority_queue<task>v;
int _tmain(int argc, _TCHAR* argv[])
{
	
	ifstream in("D:\\visual studio 2013 code\\test.txt");
	ofstream out("D:\\visual studio 2013 code\\out.txt");
	string str1,str2;
	char temp[80];
	task t1;
	//vector<string>str_v;
	//vector<string>::iterator str_it;
	while (in >> str1)
	{
		//str_it = str_v.begin();
		if (str1 == "GET"&&v.size()==0)
		{
			cout << "EMPTY QUEUE!" << endl;
		}
		else if (str1 == "GET")
		{
			cout << v.top().content<<" "<<v.top().data << endl;
			v.pop();
		}
		else if (str1 == "PUT")
		{
			//in.getline(temp,80);
			//str2 = temp;
			//cout << str2<<endl;
			in >> t1.content >>t1.data >> t1.priority;
			v.push(t1);
		}
		
	}
		
	return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值