#include <utility.h>
#include "toolbox.h"
#include <cvirte.h>
#include <userint.h>
#include "MainWindow.h"
//線程開始標記,值爲1時開始多線程
int threadID;
static int startflag = 0;
//傳遞所創建線程的callbackData參數
static void *threadfunctiondata = "這是一個多線程的示例!";
//聲明多線程回調函數
int CVICALLBACK ThreadFunction (void *functionData);
static int mainpanel;
int main (int argc, char *argv[])
{
if (InitCVIRTE (0, argv, 0) == 0)
return -1; /* out of memory */
if ((mainpanel = LoadPanel (0, "MainWindow.uir", MainPanel)) < 0)
return -1;
//創建一個線程函數
CmtScheduleThreadPoolFunction (DEFAULT_THREAD_POOL_HANDLE,ThreadFunction, threadfunctiondata, &threadID);
DisplayPanel (mainpanel);
RunUserInterface ();
//等待線程執行,直到結束
CmtWaitForThreadPoolFunctionCompletionEx (DEFAULT_THREAD_POOL_HANDLE, threadID,
OPT_TP_PROCESS_EVENTS_WHILE_WAITING, CMT_WAIT_FOREVER);
//釋放線程函數
CmtReleaseThreadPoolFunctionID (DEFAULT_THREAD_POOL_HANDLE, threadID);
DiscardPanel (mainpanel);
return 0;
}
//多線程回調函數
int CVICALLBACK ThreadFunction(void *functionData)
{
double result;
while(startflag == 1)
{
result = Random(-10,10);
Delay(2);
SetCtrlVal(mainpanel,MainPanel_WaterTemp,result);
}
return 0;
}
int CVICALLBACK MainFun (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:
startflag=0;
QuitUserInterface(0);
break;
}
return 0;
}
int CVICALLBACK WaterChange (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
double waterTemp=0;
GetCtrlVal(mainpanel,MainPanel_WaterValue,&waterTemp);
SetCtrlVal(mainpanel,MainPanel_WaterTemp,waterTemp);
case EVENT_VAL_CHANGED:
MessagePopup("hello","test");
break;
}
return 0;
}
int CVICALLBACK timerFun (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_TIMER_TICK:
static double waterTemp=0.0;
waterTemp+=0.1;
SetCtrlVal(mainpanel,MainPanel_WaterTemp,waterTemp);
break;
}
return 0;
}
int CVICALLBACK StartThread (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
startflag = 1; //線程標誌位 值爲1時,表示線程開始
CmtScheduleThreadPoolFunction (DEFAULT_THREAD_POOL_HANDLE,ThreadFunction, threadfunctiondata, &threadID);
break;
}
return 0;
}