• 网络学院
  • 新手学堂
  • 操作系统
  • 网络技术
  • 软件应用
  • 办公软件
  • 编程技术
  • 网站架设
  • 数据库类
  • 平面设计
  • 多媒体类
  • 游戏资讯
  • 教学论文
  • 认证考试
使用多线程实现数据实时采集
广告位
  站点:
  • 首 页
  • 最新软件
  • 最新文章
  • 国内软件
  • 国外软件
  • 汉化软件
  • 源码下载
  • 字体下载
使用多线程实现数据实时采集
软件发布 使用多线程实现数据实时采集
网络软件 系统工具 应用软件 联络聊天 图形图像 多媒体类 行业软件 游戏娱乐 编程开发 安全相关 教育教学 数码软件
热门软件: QQ 瑞星 pplive e话通 木马克星 千千静听 office2000 五笔字根 Photoshop 视频分割
返回首页 | 文章首页 | 编程技术 | C/C++教程 | 使用多线程实现数据实时采集

使用多线程实现数据实时采集

 

添加时间: 2006-2-22 5:54:12  作者: C++教程  阅读次数:842   来源: http://d9soft.com

 

 

       

 下面我将对这两个问题和大家一起探讨一下。相信大家对生产者消费者问题并不陌生。在读书的时候我们采用系统体提供的p,v解决,这是对同一临界区资源同时进行读写需要的保护措施,本工程使用缓冲队列,故不需要对临界区进行加锁 。马上我会实现双缓存的版本。在此版本中我会实现对临界区的加减锁。  

  读取的数据要存储到相应的数据结构中,可以有很多种选择,比如存成任务缓冲队列(以链表实现)其中大部分工程使用循环队列用于一写多读,写线程将数据写入队列,读线程从队列中读取。或者实现双缓存方法,即写线程写满一个缓存读线程来取数据同时写线程将数据写入另一个缓存。  

  具体的实现如下:  

  链表的节点声明如下:  

  typedef struct NODE  

  {  

   int Buffer[MAX_BUFFER_SIZE];

   long Counters; 

  bool ReadEnable;  

   NODE * pNext; 

  }NODE; 

  其中数组Buffer[]用来存放采集数据。Counters用来描述有多少个读线程曾对节点进行访问。如果所有读线程都访问过此节点,即可将此节点删除!ReadEnable表示其节点是否可读。

链表的声明如下: 

  typedef struct LIST 

  { 

   NODE * pReadPtr; 

   NODE * pWritePtr;  

   NODE * pHeadPtr; 

  }LIST;  

  其中pReadPtr为指向可读节点的指针,pWritePtr为指向可写节点的指针。其中pReadPtr在pWritePtr的后面,也就是写指针不能超过读指针。pHeadPtr指向链表中第一个节点的指针。 

  我使用一个写线程两个读线程,也可以实现两个以上的读线程。朋友们可以试一下只需要修改list中Counters就行了。 

  DWORD WINAPI ReaderOne(void * pVoid); 

  DWORD WINAPI ReaderTwo(void * pVoid);  

  DWORD WINAPI WriterUnique(void * pVoid);   

  在WriterUnique我采用动态分配节点,同时模拟数据采集填充NODE的buffer数组。当然要对写线程进行加锁保护。在ReaderOne和ReaderTwo中对链表中的节点进行访问并显示在对话框中。  

  注意的问题:  

  1, 因为节点是动态分配内存,所以new之后一定要delete否则内存就会被程序慢慢吃掉 

  2,加锁之后一定要解锁否则就会引起死锁问题。  

  3,首先点击“启动写线程”然后点击“启动读线程 ”程序在退出之前点击“结束写线程“就可观察到执行效果。  

 

 

 

上下文章:

 

上一篇文章: C++编程中的四个调试小技巧 下一篇文章: C语言:黑客学员必修课(二)

相关文章:

  • Oracle下调数据库许可价格以适应多芯CPU
  • Oracle发布免费数据库管理工具Raptor
  • 甲骨文意外泄漏数据库安全漏洞
  • Oracle认证数据库备份技巧
  • 甲骨文发布数据库新工具·启动内容管理战略

相关软件:

  • SmartVizor 可变数据印刷系统 8.0
  • 键盘网络城市音乐(含最新数据)
  • 子墨数据库同步工具 V1.0.0.0
  • 数据精灵(DataFairy) V5.1
  • EcTrendR实时趋势曲线控件 V1.0
  • 腾讯QQ IP数据库 V0605 纯真版

 

 

快速导航

  • 网络学院
  • 精品汇聚
  • 字体下载
  • 教程下载
  • ASP源码
  • PHP源码
  • Net源码
  • JSP 源码

编程技术分类导航

  • ASP & ASP.NET教程
  • PHP教程
  • JSP教程
  • C/C++教程
  • VB & VB.NET教程
  • VC教程
  • Delphi教程
  • BCB教程
  • VFP教程
  • PB教程
  • JAVA教程
  • XML教程
  • C#教程
  • CGI教程

本类经典文章推荐

  • C/C++作用域引申出的编码规范
  • 程序宝典:C++学习感想
  • C语言:黑客学员必修课(一)
  • C语言:黑客学员必修课(二)
  • 使用多线程实现数据实时采集
  • C++编程中的四个调试小技巧
  • C语言程序设计基础之联合
  • 学C++不得不看的一篇文章
  • C,曾经的程序员梦
  • 水滴石穿C语言之可变参数问题

C/C++教程阅读排行

  • 学C++不得不看的一篇文章
  • C语言:黑客学员必修课(一)
  • 水滴石穿C语言之可变参数问题
  • 程序宝典:C++学习感想
  • 我的Visual C++入门之路
  • 初学者学习C++的50条忠告
  • C++中的struct专题研究
  • C++箴言:只要可能就用const
  • 强大的语言——C入门
  • C++编程中的四个调试小技巧

编程技术阅读总排行

  • VB入门教程之一
  • 第二章 PowerBuilder 入门之创建新...
  • Java连接数据库实例
  • 第一章 什么是PowerBuilder
  • VC++之List Box/Check List Box控...
  • VC++ List Ctrl控件
  • VC++ Combo Box/Combo Box Ex控件
  • 学C++不得不看的一篇文章
  • VB入门教程之二
  • VC++之Button控件

广告位置

字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 回到顶部

关于我们 | 版权声明 | 免责条款 | 广告联系 | 软件发布 | 下载帮助 | 下载排行 | 网站地图 | 特别鸣谢 | 友情连接

copyright; 2005-2008 D9soft.com 第九软件网 版权所有