每十分之一的总点数存一次数据;单独另开一个线程不影响主程序的运行;通过流方式写数据到excel中,不用打开excel;
int WriteAndSaveExcel(int panelHandle, int controlID, int num)
{
int i, j;
int attributeValue;
int numberOfColumns;
int numberOfRows;
double value;
char table_title[200][200];
GetProjectDir (ExcelPathName);//得到Project当前目录名
MakePathname (ExcelPathName, "abnormalDataCache.xls", ExcelFileName);
FILE *fp = NULL;
fp = fopen(ExcelFileName, "w");
GetNumTableColumns (panelHandle, controlID, &numberOfColumns); // 列数
GetNumTableRows (panelHandle, controlID, &numberOfRows); //行数
for(j =1; j<=numberOfColumns; j++)
{
GetTableCellVal (panelHandle, controlID, MakePoint(j,1), table_title[j]); //获取table_title名称
fprintf(fp, "%s\t", table_title[j]);
}
fprintf(fp, "\n");
for(i = 2;i<(((numberOfRows -1) * num)/10);i++)
{
for(j =1; j<=numberOfColumns; j++)
{
GetTableCellAttribute (panelHandle, controlID, MakePoint(j,i),ATTR_CELL_TYPE , &attributeValue);
if(attributeValue == 0)
{
GetTableCellVal (panelHandle, controlID, MakePoint(j,i), &value); //获取数据
fprintf(fp, "%le\t", value);
}
}
fprintf(fp, "\n");
j = 1;
}
fclose(fp);
return 0;
}
int CVICALLBACK AbnmDCThreadFunction (void *functionData)
{
int n = 1; //每十分之n更新一次缓存去的数据
while(threadFlag == 1)
{
if((Graph1.pCurveArray->numOfPlotDots > 0) && (Graph1.pCurveArray->numOfPlotDots >= (Graph1.pCurveArray->numOfTotalDots * n) / 10)) //每十分之一的总点数时更新一次缓存区
{
Delay(1);
WriteAndSaveExcel(hTablePanel, TABLE_DISTABLE, n);
Delay(1);
n +=1;
if(n > 10)
{
threadFlag = 0;
return 0;
}
}
}
return 0;
}