本文共 2369 字,大约阅读时间需要 7 分钟。
参考:http://www.ni.com/white-paper/3663/zhs/
结果:
#include#include #include #include #include "test2.h"static int panelHandle;int startFlag=0;// 线程标识 1开始;同时也是OK控件奇偶数次按下的标识int CVICALLBACK DataAcqThreadFunction (void *functionData); //线程int main (int argc, char *argv[]){ if (InitCVIRTE (0, argv, 0) == 0) return -1; /* out of memory */ if ((panelHandle = LoadPanel (0, "test2.uir", PANEL)) < 0) return -1; DisplayPanel (panelHandle); RunUserInterface (); DiscardPanel (panelHandle); return 0;}int CVICALLBACK MainCallBack (int panel, int event, void *callbackData, int eventData1, int eventData2){ switch (event) { case EVENT_GOT_FOCUS: break; case EVENT_LOST_FOCUS: break; case EVENT_CLOSE: QuitUserInterface(0); //关闭程序 break; } return 0;}int CVICALLBACK Calculate (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){ double a,b; char ss[100]; switch (event) { case EVENT_COMMIT: GetCtrlVal(panelHandle,PANEL_PARA_A,&a); GetCtrlVal(panelHandle,PANEL_PARA_B,&b); sprintf(ss,"=%f",a+b); SetCtrlVal(panelHandle,PANEL_RESULT,ss); break; } return 0;}int CVICALLBACK Start (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){ int functionId; switch (event) { case EVENT_COMMIT: if(startFlag==0) { startFlag=1; SetCtrlAttribute (panelHandle, PANEL_START, ATTR_LABEL_TEXT, "CANCEL"); CmtScheduleThreadPoolFunction (DEFAULT_THREAD_POOL_HANDLE, DataAcqThreadFunction, NULL, &functionId);// CmtWaitForThreadPoolFunctionCompletion (DEFAULT_THREAD_POOL_HANDLE, functionId, 0); //辅助线程完成后才回归主线程 } else { startFlag=0; SetCtrlAttribute (panelHandle, PANEL_START, ATTR_LABEL_TEXT, "START"); } break; } return 0;}int CVICALLBACK DataAcqThreadFunction (void *functionData){ int i=0; char ss[100]; char output_file[]="data_xxx.csv"; sprintf(output_file,"data_%3d.csv",1); //设置文件名 FILE* fd=fopen(output_file,"w"); //“写”打开文件 if(!fd){ perror("fopen failed!"); return 1; } SetCtrlVal(panelHandle, PANEL_COUNT, "0");//这里确实跟MFC不太一样,可以直接访问主线程的控件 while(1){ i++; sprintf(ss,"%d",i); SetCtrlVal(panelHandle, PANEL_COUNT, ss); Delay(1); //延迟1s fprintf(fd,"%ld, ",i); //输出数据+换格 fprintf(fd,"\n"); //换行 if(i>1000 || !startFlag){ break; } } fclose(fd); //关闭文件 return 0;}