多线程 你知道吗?

Notting-Hill 2013-09-02 05:30:35
遇到一个棘手的问题,请各位帮我看看,完全没思路了。

先说说背景吧,就是一个监控打印机的程序,本来之前是每次只监控单个打印机的,基本功能我实现了,但最近被要求加功能,要求能同时监控多个打印机,我不知道该怎么做了。给大家说说我做监控单个打印机的思路吧:
EnumPrinter()检测系统中的打印机个数名称(name),将名称显示到界面供用户选择其希望监控的打印机
OpenPrinter(name,handle)能通过名字获取到该打印机的句柄
通过HANDLE hChange=FindFirstPrinterChangeNotification(handle,,,)来获得打印机状态发生变化时候的一个句柄,然后通过事件对象状态的设置,来实现一旦有打印行为发生的时候,就获取打印任务的信息。
这样实现监控功能,因为将打印机名字(name)传给OpenPrinter()来确定监控的对象是哪台打印机。
现在要实现对系统中所有的打印机进行监控怎么实现呢?
...全文
177 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Notting-Hill 2013-09-03
  • 打赏
  • 举报
回复
[quote=引用 3 楼 xiaohutushen30 的回复:] [quote=引用 2 楼 u011581242 的回复:] [quote=引用 1 楼 VisualEleven 的回复:] [quote=引用 8 楼 u011581242 的回复:] [quote=引用 5 楼 shb8845369 的回复:] [quote=引用 7 楼 u011581242 的回复:] [quote=引用 6 楼 oyljerry 的回复:] 可能我表达有问题吧 现简单的说一下我的问题: 1.我监控打印行为所触发的事件对象 需要用打印机的名字和句柄,在判断事件对象是否有信号之前这两个变量是得确定的,要不没法触发事件对象。 所以,好像“只监控打印行为,有打印行为的时候我再去看是哪台打印机打印的”这样实现同时监控多台打印机的思路是不可行的。 2.不同电脑中连得打印机数量是不一样的,所以“利用循环,将打印机数量设置为变量,创建与打印机数量相同的线程去分别监控每台打印机”这种方案看上去是可行的,除了这种方案之外有没有其他的方法?
Notting-Hill 2013-09-03
  • 打赏
  • 举报
回复
引用 5 楼 shb8845369 的回复:
线程池加I/O完成端口是比较好的可选方案。
I/O完成端口有什么特点呢?
Notting-Hill 2013-09-03
  • 打赏
  • 举报
回复
引用 6 楼 oyljerry 的回复:
可以用线程来处理,然后用一个List等保存所有打印机对应的handle,name等信息,触发事件的时候就从List中找到对应的打印机

OpenPrinter(name,handle,NULL);
hChange=FindFirstPrinterChangeNotification(handle,,,);
if(WaitForSingleObject(hChange,0U)==WAIT_OBJECT_0)
{
  //监控到打印行为
}
触发时间对象就需要打印机的name handle,所以这两个变量在触发之前得确定啊。
oyljerry 2013-09-03
  • 打赏
  • 举报
回复
引用 7 楼 u011581242 的回复:
[quote=引用 6 楼 oyljerry 的回复:] 可以用线程来处理,然后用一个List等保存所有打印机对应的handle,name等信息,触发事件的时候就从List中找到对应的打印机

OpenPrinter(name,handle,NULL);
hChange=FindFirstPrinterChangeNotification(handle,,,);
if(WaitForSingleObject(hChange,0U)==WAIT_OBJECT_0)
{
  //监控到打印行为
}
触发时间对象就需要打印机的name handle,所以这两个变量在触发之前得确定啊。[/quote] WaitForMultipleObjects
oyljerry 2013-09-02
  • 打赏
  • 举报
回复
可以用线程来处理,然后用一个List等保存所有打印机对应的handle,name等信息,触发事件的时候就从List中找到对应的打印机
昆仑道长 2013-09-02
  • 打赏
  • 举报
回复
线程池加I/O完成端口是比较好的可选方案。
Notting-Hill 2013-09-02
  • 打赏
  • 举报
回复
引用 3 楼 xiaohutushen30 的回复:
[quote=引用 2 楼 u011581242 的回复:] [quote=引用 1 楼 VisualEleven 的回复:] 多线程啊,一个线程监控一个打印机状态。
是 现在我的电脑有四台打印机 可以建4个线程 分别去监视这四台打印机 但是 理论上 如果有一台电脑上 有100台打印机 难道要建100个线程吗…… 版主大哥 求指点啊![/quote] 一台电脑都连100台打印机了,开一百个线程也没啥问题呀!一台电脑开一百个线程要比连100台打印机简单多了,一个循环就创建了一百个线程。 如果你怕创建线程和销毁线程浪费资源,就用线程池吧。[/quote] 好吧 那我试试吧……
xiaohutushen30 2013-09-02
  • 打赏
  • 举报
回复
引用 2 楼 u011581242 的回复:
[quote=引用 1 楼 VisualEleven 的回复:] 多线程啊,一个线程监控一个打印机状态。
是 现在我的电脑有四台打印机 可以建4个线程 分别去监视这四台打印机 但是 理论上 如果有一台电脑上 有100台打印机 难道要建100个线程吗…… 版主大哥 求指点啊![/quote] 一台电脑都连100台打印机了,开一百个线程也没啥问题呀!一台电脑开一百个线程要比连100台打印机简单多了,一个循环就创建了一百个线程。 如果你怕创建线程和销毁线程浪费资源,就用线程池吧。
Notting-Hill 2013-09-02
  • 打赏
  • 举报
回复
引用 1 楼 VisualEleven 的回复:
多线程啊,一个线程监控一个打印机状态。
是 现在我的电脑有四台打印机 可以建4个线程 分别去监视这四台打印机 但是 理论上 如果有一台电脑上 有100台打印机 难道要建100个线程吗…… 版主大哥 求指点啊!
Eleven 2013-09-02
  • 打赏
  • 举报
回复
多线程啊,一个线程监控一个打印机状态。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧