LabWindows/CVI线程操作
2016-01-25 09:34
281 查看
参考:http://www.ni.com/white-paper/3663/zhs/
![](http://img.blog.csdn.net/20160125093935871?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
结果:
![](http://img.blog.csdn.net/20160125093733243?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
结果:
#include <utility.h> #include <ansi_c.h> #include <cvirte.h> #include <userint.h> #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; }
相关文章推荐
- 关于MySQL数据导出导入的文章
- LightOJ1316 A Wedding Party(状压DP)
- JAVA设计模式之单例模式
- [转]java操作word文档(jacob,poi)
- cookie-util
- java模拟http请求上传文件,基于Apache的httpclient
- RSA算法完整说明-
- 【SCOI2012】喵星球上的点名
- 设计模式总结
- 转自知乎的吉他学习篇
- mybatis insert 如何返回主键
- UIImagePickerController 文字英文状态修改为中文
- LayoutInflater——inflate方法不同参数的区别
- listview 滑动监听
- oracle-备份方案之(EXP+任务计划)
- UltraWebToolbar+UltraWebGrid使用实例
- python废话二:学习python2还是python3
- 如何获取wifi名称(SSID)
- 设计模式读书笔记-----中介者模式
- 设计模式之:外观模式(Facade Pattern)