关于VC中定时器timeSetEvent的问题 uDelay的类型是UINT,UINT的定义范围是0~65535,单位是毫秒。最大定时时间你自己算是多少。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 UINT不是4个字节吗?不只65536这么点,65536毫秒才65秒左右,3分钟都有3*60000这么多,这个变量传给是uDelay正常的,但是5*60000传给uDelay,就有问题了 uDelay:以毫秒指定事件的周期; =10 就够了吧 存储部分是一个存数据的线程,线程中有一个循环不停存数据,用fwrite()函数写到硬盘上。缓存5分钟的数据应该没问题 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(); 挂起线程后,然后从一个文件里头读数据,将这些数据传到下位机,然后更改存数据文件的后缀名,最后恢复线程,开始存数据 threaddata->Suspend(); threaddraw->Suspend(); threaddata->Closefile();// 不是已经 挂起了 吗 ? “是不是缓冲中内容太多?然后写数据的时间比较长?”这两个是的,5分钟到了,将存储数据的线程挂起,关闭之前存储数据的文件,打开一个新的文件,恢复线程后,往这个新文件存数据。如何刷新缓冲区?缓冲文件系统不是windows自己管理的吗? 不是这里的问题,threaddata是一个存储线程的对象,线程执行函数只是其中的一个成员函数,线程挂起后,不影响threaddata->Closefile()执行 请问好程序员需要哪些品质? 使用List Control的一点点问题 怎样保持编辑框显示当前要显示的信息 vista下使用 ado USB驱动32位到64位机的问题 关于自定数据包只能收到一部分的问题。 学习中困惑了很久的问题 vc与matlab混合编程出现的怪异问题 Bmp图片保存问题 怎样在编辑框(CEdit Box)中,把字的颜色设成一个是红的,一个是蓝的,红蓝相间 C++内嵌汇编,32位系统执行正常,64位系统随机崩溃,求助! mfc图像处理怎么实现处理完的结果在另一个窗口显示出来啊??
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();
挂起线程后,然后从一个文件里头读数据,将这些数据传到下位机,然后更改存数据文件的后缀名,最后恢复线程,开始存数据
threaddraw->Suspend();
threaddata->Closefile();// 不是已经 挂起了 吗 ?
然后写数据的时间比较长?”
这两个是的,5分钟到了,将存储数据的线程挂起,关闭之前存储数据的文件,打开一个新的文件,恢复线程后,往这个新文件存数据。
如何刷新缓冲区?缓冲文件系统不是windows自己管理的吗?