uDelay的类型是UINT,UINT的定义范围是0~65535,单位是毫秒。最大定时时间你自己算是多少。

解决方案 »

  1.   

    UINT不是4个字节吗?不只65536这么点,65536毫秒才65秒左右,3分钟都有3*60000这么多,这个变量传给是uDelay正常的,但是5*60000传给uDelay,就有问题了
      

  2.   

     uDelay:以毫秒指定事件的周期; =10 就够了吧
      

  3.   

    存储部分是一个存数据的线程,线程中有一个循环不停存数据,用fwrite()函数写到硬盘上。缓存5分钟的数据应该没问题
      

  4.   

        threaddata->Suspend(); 
        threaddraw->Suspend();
        threaddata->Closefile(); FILE *fp2;
    if((fp2=fopen("D:\\ddc1G_wxh_clk800MHz_twomode_ver9\\setdada.txt","rb"))!=NULL)
    {
    fflush(fp2);
    fscanf(fp2,"%d",&m_mode);
    fscanf(fp2,"%f",&m_inte);
    fscanf(fp2,"%d",&m_timer);
    fscanf(fp2,"%d",&m_bitset);
    fscanf(fp2,"%f",&m_scaledl);
    fscanf(fp2,"%f",&m_scaledr);
    }
    fflush(fp2);

        char shuchu[20];
    if (fabs(m_inte-ddc1g->inte)>0.00001)
    {
    ddc1g->m_times=intetotimes(m_inte); 
    m_inte=timestointe(ddc1g->m_times+1);
    sprintf(shuchu,"%.5f",m_inte);//sprintf默认四舍五入功能
    m_inte=atof(shuchu);
    ddc1g->inte=m_inte;
    }
       
       if(ddc1g->inited)
    {   
    ddc1g->reset_FPGA();

    ddc1g->set_mode(m_mode);
    ddc1g->set_accnum(ddc1g->m_times);

    UINT t_scaledl = float2fixed(m_scaledl);
    UINT t_scaledr = float2fixed(m_scaledr);
    ddc1g->set_scaled(t_scaledl,t_scaledr);

    if (m_bitset==0) 
    ddc1g->set_bit_sel(7);            
    else
    ddc1g->set_bit_sel(m_bitset+6);

    m_tab.DeleteAllItems();
    if(ddc1g->get_mode()==0)
    {
    m_tab.InsertItem(0,"Single Channel");
    threaddraw->channel = 0;
    }
    else
    {
    threaddraw->channel = 1;
    m_tab.InsertItem(0,"Two-channel");
    m_tab.InsertItem(1,"Left Channel");
    m_tab.InsertItem(2,"Right Channel");
    }

    ddc1g->m_recSet[0].num=m_mode;
    ddc1g->m_recSet[1].num=m_bitset;
    ddc1g->m_recSet2[0].num=m_inte;
    ddc1g->m_recSet2[1].num=m_scaledl;
    ddc1g->m_recSet2[2].num=m_scaledr;   

            ddc1g->set_flag=true;
    threaddata->Reset();
    threaddraw->Reset();
    }
    ddc1g->set_FPGA();
    delay_ms(5000);

        static int name=0;
    char *filetemp;
    if (name==65544)
    name=0;
    char nametemp[10];
    _itoa(name,nametemp,10);
    name++; 

        char suffix[]=".dat";
    CString cs;
    GetDlgItemText(SF_EDIT,cs);
    cs=cs.SpanExcluding(".")+'_'+CString(nametemp)+CString(suffix);
    threaddata->SetSaveFile(cs.GetBuffer(0));

    threaddata->Resume();
    threaddraw->Resume();
       挂起线程后,然后从一个文件里头读数据,将这些数据传到下位机,然后更改存数据文件的后缀名,最后恢复线程,开始存数据
      

  5.   

     threaddata->Suspend(); 
        threaddraw->Suspend();
        threaddata->Closefile();// 不是已经 挂起了 吗 ?
      

  6.   

    “是不是缓冲中内容太多?
    然后写数据的时间比较长?”
    这两个是的,5分钟到了,将存储数据的线程挂起,关闭之前存储数据的文件,打开一个新的文件,恢复线程后,往这个新文件存数据。
    如何刷新缓冲区?缓冲文件系统不是windows自己管理的吗?
      

  7.   

    不是这里的问题,threaddata是一个存储线程的对象,线程执行函数只是其中的一个成员函数,线程挂起后,不影响threaddata->Closefile()执行