做医学心电数据及图形显示,诱发电位数据及图形显示已经有近五个年头了,在这类程序中主要是数据的采集及后期的处理,以心电数据为例,从人体采集的心电数据一般为每秒200~500点,如果按每秒钟绘制一次,那么屏幕的显示将是有停顿的,并且给人的整体感觉不好,那么如何来解决这个问题呢。
1.问题的提出。
a.时实采集的数据与绘制图形的数据如何存放,如何取出。
b.如果界定原始数据中有能取出的数据。
为此,我们要准备两个数据缓冲区,一个存放原始数据,一个存放取出的数据(这个可以要也可以不要,可以用要用到这个数据的另个函数传入数据指针,然后取走就是)。
用线程来实现数据的取,线程一直处于数据的取状态,当原始数据中的点到达取的点数,那么线程就取走点,如:我们定义一个1000的数组用于存放原始数据。
int *m_pData ; m_pData = new int[1000] ,
再定义一个,读的位置m_iCurReadPos ,一个写的位置 m_iCurWritePos ,当
m_iCurWritePos - m_iCurReadPos > 要取的点数 ,这个时候就可以完成一次取点了。
然后,m_iCurReadPos = m_iCurReadPos + 要取的点数,位置往后移,如果达到最大长度时,那么
m_iCurReadPos = 0 ; 当然m_iCurWritePos 是随着原始数据的累加而往后移的,现在只考虑计算机的读速度比存速度快,因这样的原始数据一般来自于网络,串口传输,远比计算机的处理速度慢得多。
大概思想就是这样,先写个线程试试,下篇文章我会用程序代码说明如何实现这个存取问题。好了休息,明天还有一大堆程序要写。