void NetShrVarInterface::connectVars() { int error; CallbackData* cb_data; int waitTime = 3000; int clientBufferMaxItems = 200; #ifdef _WIN32 int running = 0; error = CNVVariableEngineIsRunning(&running); ERROR_CHECK("CNVVariableEngineIsRunning", error); if (running == 0) { std::cerr << "connectVars: Variable engine is not running" << std::endl; } #endif for(params_t::const_iterator it=m_params.begin(); it != m_params.end(); ++it) { NvItem* item = it->second; cb_data = new CallbackData(this, item->nv_name, item->id); // check variable exists and create if not??? // create either reader or buffered reader std::cerr << "connectVars: connecting to \"" << item->nv_name << "\"" << std::endl; if (item->access & NvItem::Read) { error = CNVCreateSubscriber(item->nv_name.c_str(), DataCallback, StatusCallback, cb_data, waitTime, 0, &(item->subscriber)); ERROR_CHECK("CNVCreateSubscriber", error); } else if (item->access & NvItem::BufferedRead) { error = CNVCreateBufferedSubscriber(item->nv_name.c_str(), StatusCallback, cb_data, clientBufferMaxItems, waitTime, 0, &(item->b_subscriber)); ERROR_CHECK("CNVCreateBufferedSubscriber", error); } // create either writer or buffered writer if (item->access & NvItem::Write) { error = CNVCreateWriter(item->nv_name.c_str(), StatusCallback, cb_data, waitTime, 0, &(item->writer)); ERROR_CHECK("CNVCreateWriter", error); } else if (item->access & NvItem::BufferedWrite) { error = CNVCreateBufferedWriter(item->nv_name.c_str(), DataTransferredCallback, StatusCallback, cb_data, clientBufferMaxItems, waitTime, 0, &(item->b_writer)); ERROR_CHECK("CNVCreateBufferedWriter", error); } } }
int CVICALLBACK threadFunc (void *functionData) { char textline[1024]; volatile int stop = 0, loop = 0; double value = 0.0; CNVBufferedWriter bufferedWriter; CNVData data = 0; int error; char buffer[MAX_PATHNAME_LEN]; // wait for tread lock CmtGetLock (lock); // release the lock CmtReleaseLock (lock); status = 2; // run while loop SetCtrlVal (panelHandle, PANEL_STATUS, status); SetCtrlVal(panelHandle, PANEL_TEXTSTRING, "Nice! thread() has been started!"); Delay (1.0); error = NetworkVariablePopup (buffer); if (error < 0) { MessagePopup ("Error", GetGeneralErrorString(error)); return 0; } else if (error > 0) { SetCtrlVal (panelHandle, PANEL_NAME, buffer); SetWaitCursor (1); error = CNVCreateBufferedWriter (buffer, DataTransferredCallback, StatusCallback, 0, 10, 10000, 0, &bufferedWriter); SetWaitCursor (0); if (error < 0) { MessagePopup ("Error", CNVGetErrorDescription(error)); return 0; } else { SetCtrlVal (panelHandle, PANEL_CNVSTATUS, "Connected"); } } CNVCreateScalarDataValue (&data, CNVDouble, value); while (stop == 0) { SetCtrlVal (panelHandle, PANEL_LED, 0); GetCtrlVal (panelHandle, PANEL_STOPBUTTON, &stop); Delay (0.2); sprintf (textline, "%i, %i", loop++, stop); SetCtrlVal (panelHandle, PANEL_TEXTSTRING, textline); value = loop; CNVSetScalarDataValue (data, CNVDouble, value); CNVPutDataInBuffer (bufferedWriter, data, CNVDoNotWait); } SetCtrlVal(panelHandle, PANEL_TEXTSTRING, "Nice! thread() has been stopped!"); Delay (1.0); CNVDisposeData (data); CNVDispose (bufferedWriter); CNVFinish (); status = 3; // exit threadFunc() SetCtrlVal (panelHandle, PANEL_STATUS, status); return 0; }