Windows核心编程<读书笔记五>手把手写JobLab程序_createjobobject lpoverlapped-程序员宅基地

技术标签: null  读书  编程  windows  basic  Windows核心编程读书笔记  object  

【文起】亲爱的蟹儿,12点没去睡觉,不乖了,想多看点儿书,回去就能多陪陪你了。爱你奋斗

根据书上的程序,自己用MFC完成了书上的功能。

1、在OnInitDialog() 函数中对IDC_COMBO_PRIORITY 和 IDC_COMBO_SCHEDULING 初始化,并设定定时器函数。

CComboBox *pcom = (CComboBox *)GetDlgItem(IDC_COMBO_PRIORITY);

	pcom->InsertString(0,_T("No Limit"));
	pcom->InsertString(1,_T("Idle"));
	pcom->InsertString(2,_T("Below Normal"));
	pcom->InsertString(3,_T("Normal"));
	pcom->InsertString(4,_T("Above Normal"));
	pcom->InsertString(5,_T("High"));
	pcom->InsertString(6,_T("Realtime"));
	pcom->SetCurSel(0);

	CComboBox *pcomScheduling = (CComboBox *)GetDlgItem(IDC_COMBO_SCHEDULING);
	pcomScheduling->InsertString(0,_T("No Limit"));
	for (int i = 0;i < 10;i++)
	{
		TCHAR sz[] = {TCHAR('0' + i),0};
		//pcomScheduling->AddString(sz);
		pcomScheduling->InsertString(i+1,sz);
	}
	pcomScheduling->SetCurSel(0);

	SetTimer(TIME1,TIME_LEN,NULL);//设定定时器10s刷新一次

Create IO,并将此IO与JOB关联起来,同时申请一个进程来执行队列中的事情。该进程对应的函数为UINT WINAPI JobNotify(PVOID)        

         g_hIOCP = CreateIoCompletionPort(INVALID_HANDLE_VALUE,NULL,0,0);
	g_hThreadIOCP = (HANDLE)_beginthreadex(NULL, 0, JobNotify, NULL, 0, NULL);
	g_hjob = CreateJobObject(NULL,_T("Job Lab"));
	JOBOBJECT_END_OF_JOB_TIME_INFORMATION joend = {JOB_OBJECT_TERMINATE_AT_END_OF_JOB};
	joend.EndOfJobTimeAction = JOB_OBJECT_TERMINATE_AT_END_OF_JOB;
	SetInformationJobObject(g_hjob,JobObjectEndOfJobTimeInformation,&joend,sizeof(joend));
	
	JOBOBJECT_ASSOCIATE_COMPLETION_PORT joacp = {(PVOID)COMPKEY_JOBOBJECT,g_hIOCP};
	SetInformationJobObject(g_hjob,JobObjectAssociateCompletionPortInformation,&joacp,sizeof(joacp));

2、添加ON_WM_TIMER消息的处理,会自动生成函数void CJobLabDlg::OnTimer(UINT_PTR nIDEvent),在定时器函数中,每10秒Post消息到队列中

void CJobLabDlg::OnTimer(UINT_PTR nIDEvent)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	if (TIME1 == nIDEvent)
	{
		PostQueuedCompletionStatus(g_hIOCP,0,COMPKEY_STATUS,NULL);
	}

	//CDialog::OnTimer(nIDEvent);
}

同时,添加ON_WM_DESTROY的处理,用来kill定时器和释放job、IO等

void CJobLabDlg::OnDestroy()
{
	CDialog::OnDestroy();

	// TODO: 在此处添加消息处理程序代码
	KillTimer(TIME1);
	TerminateJobObject(g_hjob,0);

	PostQueuedCompletionStatus(g_hIOCP,0,COMPKEY_TERMINATE,NULL);

	WaitForSingleObject(g_hThreadIOCP,INFINITE);

	CloseHandle(g_hIOCP);
	CloseHandle(g_hThreadIOCP);
}


3、获取界面上的Job限制的信息,并且写入Job中,注意:MinimumWorkingSetSize  和 MaximumWorkingSetSize 必须同时赋值,不然会报错哦。

void CJobLabDlg::SetJobFunc()
{
	DWORD m_dwProcessLimitTime;
	CString m_strPriority,m_strScheduling;
	DWORD m_dwJobLimitTime;
	DWORD m_dwMinSize;
	DWORD m_dwMaxSize;
	DWORD m_dwProcessLimit;
	DWORD m_dwMask;
	DWORD m_dwMaxJob;
	DWORD m_dwMaxProcess;
	BOOL flag;
	CComboBox *pcomPri = (CComboBox *)GetDlgItem(IDC_COMBO_PRIORITY);
	CComboBox *pcomSche = (CComboBox *)GetDlgItem(IDC_COMBO_SCHEDULING);

	/* 开始基本限制 *
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wuhailin1987/article/details/7018052

智能推荐

腾讯地图 点聚合_腾讯地图点聚合自定义图标-程序员宅基地

文章浏览阅读4.3k次。首先,我有一万个理由,不想用腾讯地图,但只有一个理由说服我使用:做微信开发,地图组件需要和微信自带地图保持一致性。今天我做了腾讯地图很多marker点的聚合显示功能,主要参考官方的,下面是地址,可以参考一下,很多代码可以删掉。https://lbs.qq.com/javascript_v2/case-run.html#overlay-markercluster..._腾讯地图点聚合自定义图标

物联网之NB-IoT技术实践开发二_at+cereg=2-程序员宅基地

文章浏览阅读603次。STM32CubeMX安装及使用1、STM32CubeMX介绍2、STM32CubeMX安装3、STM32CubeMX使用STM32CubeMX介绍STM32CubeMX简介:微控制器图形化配置– 自动处理引脚冲突– 动态设置确定的时钟树–..._at+cereg=2

Mybatis 和 Mybatis Plus 的区别_mybatis和mybatisplus-程序员宅基地

文章浏览阅读7.3k次,点赞4次,收藏16次。Mybatis PlusMybatis-Plus是一个Mybatis的增强工具,只是在Mybatis的基础上做了增强却不做改变,MyBatis-Plus支持所有Mybatis原生的特性,所以引入Mybatis-Plus不会对现有的Mybatis构架产生任何影响。Mybatis 和 Mybatis Plus 的区别MyBatis:所有SQL语句全部自己写手动解析实体关系映射转换为MyBatis内部对象注入容器不支持Lambda形式调用Mybatis Plus:强大的条件构造器,满足各类使_mybatis和mybatisplus

Redis_主从复制、Redis集群-程序员宅基地

文章浏览阅读55次。Redis_主从复制、Redis集群

mysql 联合索引 btree_Mysql联合索引-程序员宅基地

文章浏览阅读297次。面试的时候总会问到索引的问题,而且一般会问到关于索引失效、哪种查询会走索引,哪种方式不会这种问题。今天早上闲来无事对联合索引进行了一些简单的实验,要测试的话肯定还有很多场景,在这里抛砖引玉。以后有机会再来完善此篇博客。数据库版本建表语句CREATE TABLE `union_test` (`id` int(11) NOT NULL AUTO_INCREMENT,`a` varchar(8) COL..._mysql key `jsbh_jcsj_index` (`jsbh`,`jcsj`) using btree

zabbix 讲解_zabbix数据存储在哪-程序员宅基地

文章浏览阅读2k次,点赞4次,收藏7次。一、监控知识基本概述1.为什么要使用监控1.对系统不间断实时监控2.实时反馈系统当前状态3.保证服务可靠性安全性4.保证业务持续稳定运行2.如何进行监控,比如我们需要监控磁盘的使用率1.如何查看磁盘使用率 df -h2.监控磁盘的那些指标 block、 inode3.获取的数值到达多少报警 80%3.流行的监控工具1.Zabbix2.Lepus(天兔)数据库监控系统3.Open-Falcon 小米4.Prometheus(普罗米修斯, Docker、 K8s)4._zabbix数据存储在哪

随便推点

前端工具推荐 PxCook-程序员宅基地

文章浏览阅读1w次,点赞29次,收藏41次。前端页面设计的工具推荐---PxCook_pxcook

分享将单号保存在文档中一键导入并查询_怎么把快递订单编号一键插入word-程序员宅基地

文章浏览阅读153次。网上购物是大部分人的选择,有购物就肯定有查询物流信息的需求,小编教大家一个方法批量查询物流信息,批量导入单号一键查询,感兴趣的快来看看吧。并且物流信息跟官网同步,不需要一个一个查询,批量查询非常方便,快去试试吧。单号导入软件中一行一个排序,单击“保存”功能就可以对单号进行查询。将事先保存在文档中的单号打开,这时只需将文档选中“打开”即可。首先运行“快递批量查询高手”在软件中单击“添加单号”功能。会弹出一个添加快递单号文件框,在左下角选择“从。在提示框中选择“否”软件会自动识别快递公司。_怎么把快递订单编号一键插入word

记录一次莫名其妙的错误 ModuleNotFoundError: No module named ‘pyecharts. charts‘ ; ‘pyecharts‘ is not a package_pyecharts.charts为什么在vscode无法找到-程序员宅基地

文章浏览阅读2k次。今天在安装python的pyecharts库的遇到了奇怪的问题。ModuleNotFoundError: No module named ‘pyecharts. charts’ ; ‘pyecharts’ is not a package但是,我进入site-packages又看见的的确确是有这个模块的百度了不少,换过两个版本,尝试了各种花式安装方法,借过同学的pyecharts库,最后尝试了重启,还是没能解决。最后感觉不会是版本问题,还是选择卸载了其他版本,选择了最新的版本pip unins_pyecharts.charts为什么在vscode无法找到

Mac系统python socket报错socket.gaierror: [Errno 8] nodename nor servname provided, or not known-程序员宅基地

文章浏览阅读7.9k次。报错内容Traceback (most recent call last): File "server.py", line 19, in <module> serversocket.bind((host, port))socket.gaierror: [Errno 8] nodename nor servname provided, or not known解决方式..._[errno 8] nodename nor servname provided, or not known

连接-程序员宅基地

文章浏览阅读55次。http://v.youku.com/v_show/id_XNTg1ODUzNjg=.htmlhttp://blog.csdn.net/w809026418/archive/2008/12/05/3455610.aspx...

error C2440: “static_cast”: 无法从“UINT (__thiscall CXXX::* )(CPoint)”转换为“LRESULT (__thiscall CWnd::* )-程序员宅基地

文章浏览阅读2.2k次。发现CXXX是一个很好的实现VC界面的类,下来编译出现如下错误:错误 1 error C2440: “static_cast”: 无法从“UINT (__thiscall CXXX::* )(CPoint)”转换为“LRESULT (__thiscall CWnd::* )(CPoint)”解决:查看CWnd类afx_msg LRESULT OnNcHitTest(CPoint poi_error c2440: “static_cast”: 无法从“uint (__thiscall cscope::* )(cpoint)”