1. #include "WMIManager.h"
  2. #include <vector>
  3. #include <string>
  4. #include <boost/thread/thread.hpp>
  5. #include <boost/array.hpp>
  6. #include <boost/asio.hpp>
  7.  
  8. /**************************************************************
  9. 技术博客
  10. http://www.cnblogs.com/itdef/
  11.  
  12. 技术交流群
  13. 群号码:324164944
  14.  
  15. 欢迎c c++ windows驱动爱好者 服务器程序员沟通交流
  16. **************************************************************/
  17.  
  18. using namespace DEF;
  19. using boost::asio::ip::tcp;
  20.  
  21. void WMIManager::Transfer()
  22. {
  23. tcp::resolver resolver(io_);
  24. tcp::resolver::query query("127.0.0.1", "");
  25. tcp::resolver::iterator iterator = resolver.resolve(query);
  26. try {
  27. tcp::socket s(io_);
  28. boost::asio::connect(s, iterator);
  29.  
  30. while ()
  31. {
  32. std::unique_lock<std::mutex> lck(mtx_);
  33. while (!ready_) // 如果标志位不为 true, 则等待...
  34. cv_.wait(lck);
  35. while (!strVec_.empty())
  36. {
  37. std::cout << strVec_.back() << std::endl;
  38. size_t n = boost::asio::write(s, boost::asio::buffer((strVec_.back()).c_str(), (strVec_.back()).size()+));
  39. strVec_.pop_back();
  40. }
  41. ready_ = false;
  42. }
  43. }
  44. catch (std::exception& e)
  45. {
  46. std::cerr << "Exception: " << e.what() << "\n";
  47. }
  48.  
  49. }
  50.  
  51. bool WMIManager::Start()
  52. {
  53. if (false == wmiInfo_.Init(L"ROOT\\CIMV2"))
  54. {
  55. return false;
  56. }
  57. boost::thread t(&WMIManager::Transfer,this);
  58. t_.async_wait(boost::bind(&WMIManager::Loop,this,
  59. boost::asio::placeholders::error, &t_, &wmiInfo_));
  60.  
  61. io_.run();
  62. t.join();
  63. return true;
  64. }
  65.  
  66. void WMIManager::Loop(const boost::system::error_code& e,
  67. boost::asio::deadline_timer* t, WMIInfo* wmiInfo)
  68. {
  69. if ( wmiInfo->QueryWin32Process(L"WQL", L"SELECT * FROM Win32_Process", strVec_) )
  70. {
  71. // transfer std::vector<std::string>
  72. }
  73. t->expires_at(t->expires_at() + boost::posix_time::seconds());
  74. t->async_wait(boost::bind(&WMIManager::Loop, this,
  75. boost::asio::placeholders::error, t, wmiInfo));
  76. }

代码片段

具体见

http://www.oschina.net/code/snippet_614253_56135

wmi收集系统信息 发送到服务器打印的更多相关文章

  1. Linux下dmesg命令处理故障和收集系统信息的7种用法

    目录: <syslog之一:Linux syslog日志系统详解> <syslog之二:syslog协议及rsyslog服务全解析> <syslog之三:建立Window ...

  2. windows7打印时,显示脱机,提示“服务器打印后台处理程序服务没有运行”。

    1. 问题 windows7打印时,显示脱机,提示“服务器打印后台处理程序服务没有运行”. 2. 解决方法. 将下面的文字保存为bat文件执行,其中\\192.168.40.110\Lenovo M7 ...

  3. angular2^ typescript 将 文件和Json数据 合并发送到服务器(2.服务端)

    nodejs 中使用框架 express web框架 multer 文件接受 直接贴代码了,我就不解释了 "use strict"; exports.__esModule = tr ...

  4. 主机性能监控之wmi 获取系统信息及内存性能信息

    标 题: 主机性能监控之wmi 获取系统信息及内存性能信息作 者: itdef链 接: http://www.cnblogs.com/itdef/p/3990240.html 欢迎转帖 请保持文本完整 ...

  5. form表单在发送到服务器时候编码方式

    enctype(编码方式):规定了form表单在发送到服务器时候编码方式.有如下的三个值可选: 1.application/x-www-form-urlencoded.默认的编码方式.但是在用文本的传 ...

  6. Ubuntu 16.04上安装并配置Postfix作为只发送SMTP服务器

    如果大家已经在使用第三方邮件服务方案发送并收取邮件,则无需运行自己的邮件服务器.然而,如果大家管理一套云服务器,且其中安装的应用需要发送邮件通知,那么运行一套本地只发送SMTP服务器则更为理想. 如何 ...

  7. dotnet 通过 WMI 获取系统信息

    本文告诉大家如何通过 WMI 获取系统信息 通过 Win32_OperatingSystem 可以获取系统信息 var mc = "Win32_OperatingSystem"; ...

  8. Android进阶——Crash异常捕获并发送到服务器

    在项目中,我们常常会遇到Crash的现象,也就是程序崩溃的时候,这个时候最常看到的就是这个界面 如果你的项目已经发布到市场上了,这样的崩溃对于开发人员是看不到的,所以我们得想方法将崩溃信息发送到服务器 ...

  9. 客户端必须在它发送到服务器的所有帧中添加掩码(Mask)

    在WebSocket协议中,数据是通过一系列数据帧来进行传输的.为了避免由于网络中介(例如一些拦截代理)或者一些在第10.3节讨论的安全原因,客户端必须在它发送到服务器的所有帧中添加掩码(Mask)( ...

随机推荐

  1. element-ui打包和运行报错处理

    最近在使用webpack打包过程中遇到element-ui报错. 说明一下情况:之前在原有的配置文件和node_modules依赖包下打包的过程中,一直都很顺利,但是突然就报错了,很尴尬啊! 1 ER ...

  2. Testng优势

    选择Testng的理由: 1.可指定执行顺序, dependsOnMethods 属性来应对测试的依赖性问题. 2.·参数化1:轻轻松松从XML中得到参数 @BeforeClass public vo ...

  3. PAT 1016 部分A+B C语言

    1016. 部分A+B (15) 正整数A的“DA(为1位整数)部分”定义为由A中所有DA组成的新整数PA.例如:给定A = 3862767,DA = 6,则A的“6部分”PA是66,因为A中有2个6 ...

  4. Spring Bean单例与线程安全

    一.Spring单例模式及线程安全 Spring框架中的Bean,或者说组件,获取实例的时候都是默认单例模式,这是在多线程开发的时候需要尤其注意的地方. 单例模式的意思是只有一个实例,例如在Sprin ...

  5. Web验证方式(4)--JWT

    OAuth协议中说到的AccessToken可以是以下两种: 1.任意只起到标识作用的字符串:这种情况下Resource Server处理请求时需要去找Authorization Server获取用户 ...

  6. 【转】MySQL存储过程中使用动态行转列

    MySQL存储过程中使用动态行转列 最近做项目关于数据报表处理,然而数据库存储格式和报表展现形式不同,需要进行一下行转列的操作,在做上一个项目的时候也看了一下,但是后来换了读取方式,也就没深入研究这个 ...

  7. Tensorflow笔记——神经网络图像识别(一)前反向传播,神经网络八股

      第一讲:人工智能概述       第三讲:Tensorflow框架         前向传播: 反向传播: 总的代码: #coding:utf-8 #1.导入模块,生成模拟数据集 import t ...

  8. Map和Bean的相互转换

    Map和Bean的相互转换 BeanUtils位于org.apache.commons.beanutils.BeanUtils下面,其方法populate的作用解释如下: 完整方法: BeanUtil ...

  9. 视频描述(Video Captioning)调研

    Video Analysis 相关领域介绍之Video Captioning(视频to文字描述)http://blog.csdn.net/wzmsltw/article/details/7119238 ...

  10. 蚂蚁社招Java-第四轮电话面试【技术终面】

    作者:听着歌过面试链接:https://www.nowcoder.com/discuss/64708来源:牛客网 蚂蚁社招Java-第四轮电话面试[技术终面] 转载   (耗时22分钟,其实聊得东西挺 ...