当前位置:首页 » 编程博文
开发技术指南» 文章正文
    引言:
 

 

    摘要:我是做行业软件的所以经常会接触到对数据进行实时采集的问题。一般的问题是,一个线程读取数据,其他的线程对数据进行处理(如画出实时曲线,将数据存入文件等等)。这涉及到两方面问题.1,线程的同步问题—典型的生产者和消费者的问题;2,数据结构问题。即将采集的数据以什么形式存储并由消费者进行读取。 下面我将对这两个问题和大家一起探讨一下。相信大家对生产者消费者问题并不陌生。在读书的时候我们采用......
 ·mmx及sse优化--mmx篇    »显示摘要«
    摘要: mmx和sse都是intel开发的基于simd(单指令多数据流)的技术。所谓单指令多数据流是指可以用一条指令可以完成多个数据的操作。虽然64位系统已经推出,但是我们大部分都是使用32位系统,所以如果要完成两个128位的相加运算,用普通32位指令很明显要执行4条相加指令,而基于64位的mmx指令只需要执行两次即可完成,更强大的sse能一次处理128位,故一次就可以完成操作,所以采用mmx及sse优......


VC 点滴 之 重绘
?

1.onpaint与ondraw函数 【程序编程相关:Linux 服务器集群系统

一.??????????? 基本知识: 【推荐阅读:(原创)关于如何处理EXCEL( CSV

2.cpaintdc与cclietndc 【扩展信息:通用 文件保存至数据库,从数据库写入磁盘

view的父类的onpaint函数调用了ondraw函数,若在子类为wm_paint消息添加响应函数onpaint,ondraw函数将不会被调用.

cpaintdc的构造函数中调用了beginpaint(),析构函数中调用了endpaint();

cclietndc的构造函数中调用了getdc(),析构函数中调用了releasedc().

而beginpaint(),endpaint()只能用于响应wm-paint消息,否则将会出错.

二.??????????? 利用动态数组:

1.定义结构体line,用于保存线的数据.

struct line

{

?????? cpoint m_pt1;

?????? cpoint m_pt2;

};

2.在view中定义一个动态数组,保存每一根线的指针.

cptrarray m_ptrlines;

    定义两个cpoint的成员变量,保存线的起点与终点:

        ?? cpoint m_ptold;

?????? cpoint m_ptnew;

3.在view中加入wm_lbuttondown,wm_lbuttonup的响应函数,在onlbuttondown中为m_ptnew赋值,

      ??? m_ptold=point;

4.在onlbuttonup中加入代码:

      m_ptnew=point;

?????? cclientdc dc(this);

?????? ?????? ?????? dc.moveto(m_ptold);

?????? dc.lineto(point);

?????? ????????????? line *pln=new line;

?????? pln->m_pt1=m_ptold;

?????? pln->m_pt2=m_ptnew;

?????? m_ptrlines.add(pln);

5.在ondraw()中加入:

int sum= m_ptrlines.getsize();

for(int i=0;i

{

?????? pdc->moveto(((line *)m_ptrlines.getat(i))->m_pt1);

?????? pdc->lineto(((line *)m_ptrlines.getat(i))->m_pt2);

}

6.加入滚动条:将view的cpp文件与h文件中的cview全部替换成cscrollview.

7.在view中加入虚函数oninitialupdate(),这个函数在view第一次刷新前被调用,在其中加入代码:

     setscrollsizes(mm_text,csize(1024,768));

????????????? 这个函数也可在view的构造函数中调用.

8.在onlbuttonup中生成dc后加入

onpreparedc(&dc);

?????? ?????? dc.dptolp(&m_ptold);

?????? dc.dptolp(&m_ptnew);

三.??????????? 利用cmetafiledc重绘

1.在view中定义成员变量:

?????? cmetafiledc m_dcmetafile;

2.在view的oncreate中加入代码:

m_dcmetafile.create();

3.在view的onlbuttonup中,注释有关数组的代码,加入:

m_dcmetafile.moveto(m_ptold);

m_dcmetafile.lineto(m_ptnew);

4.在ondraw()中

?????? hmetafile hmetafile;

?????? hmetafile=m_dcmetafile.close();

?????? pdc->playmetafile(hmetafile);

?????? m_dcmetafile.create();

?????? m_dcmetafile.playmetafile(hmetafile);

?????? ::deletemetafile(hmetafile);

5.保存文件:

加入菜单响应函数,onfilesave,加入代码:

?????? hmetafile hmetafile;

?????? hmetafile=m_dcmetafile.close();

?????? ::copymetafile(hmetafile,"c:\\2.ddd");

?????? m_dcmetafile.create();

?????? m_dcmetafile.playmetafile(hmetafile);

?????? ::deletemetafile(hmetafile);

6.读出文件:

加入菜单响应函数,onfileload,加入代码:

?????? ?????? hmetafile hmetafile;


...   下一页
 ·我的thinking in java学习笔记(九)    »显示摘要«
    摘要:第五章 隐藏实现细目 首先考虑oop的一个重要思想--让变动的东西和不变动的事物彼此分开。 java库的程序员在编写库的时候最需要考虑到的就是,一旦他们改变类中的某个函数或者是成员变量,让已经使用前一版本库的程序不会受到变动的影响。库的编写者无法知道程序员调用用了库中那些函数和变量,因而无法修改库的成员,于是为了解决这样的问题,java中出现了访问控制符,其作用就是告诉程序员,那些是可用的,那些是......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE