麻烦高手指点一下,如果不行,请高手帮忙改动一下typedef struct tagLIST //新的数据类型
{
   float x;
   float y;
   float z;
   struct tagLIST *next;
}MYLIST;
MYLIST *Head=NULL; //定义链表的头
MYLIST *Tail=NULL; //定义链表的尾
MYLIST *First=NULL; //定义当前指针,为循环链表准备//下面开辟一个3000个点的数据for(int i=0;i<3000;i++)
{
    MYLIST *p= new MYLIST;  //新分配1个数据
    p->x=p->y=p->z=0.0;     //初始化
    p->next=NULL;
    if(NULL==Head)          //如果还没有数据,就是第一个数据
       First=Tail=Head=p;
    else
    {
        Tail->next=p;       //新数挂在尾巴上
        Tail=Tail->next;    //新的尾巴在后一位置了
    }
    
    Tail->next=Head; //循环链表就加上下面这句,尾巴连到头
}//现在来看看如何把这缓冲画到屏幕
while(1)
{
    采集新数据给First赋值;
    MYLIST *pCur=First->next; //pCur就是最老的数,First是最新的数
    while(pCur!=First) //走一圈,从最老的数一直扫到最新的数
    {
        取pCur->x;
        取pCur->y;
        取pCur->z;
        计算成坐标并画图
        pCur=pCur->next; //下一点
    }
    First=First->next; //每次画完,开始位置下挪一个位置
}

解决方案 »

  1.   

    接收一个时候再新建一个这样不好么?干嘛要一次建300个= =,采集啥的不知道你咋搞,就是存数据嘛。有就存。while(First->next == NULL){建一个咯?} 
      

  2.   

    高手们,我想用链表先从文件中(txt)定时取数(用多媒体定时器),把取得数分成3个数组,通过全局变量传给主线程画图(用poline函数绘曲线图)。这一切都在工作线程中进行。
      1 我现在不会用链表从文件中取数,特别在工作线程中如何实现的,
      2 如何把数据通过全局变量传给主线程绘图
    请高手给个详细指点
      

  3.   

    没有什么所谓用链表读文件
    读文件就是读文件
    无非就是CFile
    读出数据添加到链表中即可
      

  4.   

    线程同步才是关键,可以用CRITICAL_SECTION,你这是单向表也可以用系统支持的SLIST API(InitializeSListHead/InterlockedPushEntrySList/InterlockedPopEntrySLis等),好处是简单(自动支持多核系统)缺点是效率低一点。