我在控制台应用程序中有以下代码,我使用TCP/IP连接连接到扫描设备,在建立连接后,我将不断获得扫描测量值。但我需要用户在任何时候停止测量。
我正在考虑在控制台应用程序本身中完成它。我需要使用线程吗?。如果用户在扫描过程中停止,我想完成特定的扫描,然后退出(类似于锁定)。我只是在学习c++和c++/cli。。任何建议都会很有帮助。。感谢
if (sopas.GetScanData(soScan) == true)
{
printf("Continuous Scanning Measurement n");
processcounter = ProcessScan(soScan,processcounter,gp,Background);
}
这个过程扫描的骨架是
unsigned int ProcessScan(const SLms100Scan& soScan,int iProcessedScanCount,FILE* gp,vector <double> &Background)
{
static unsigned int ulDeg90_index = 0; // Calculated during init phase
static unsigned int ulProcessedScanCounter = 0;
int iDataCount = soScan.aDataChannel16.aFlexArrayData[0].aData.uiFlexArrayLength;
int datalength = soScan.aDataChannel16.aFlexArrayData[0].aData.uiFlexArrayLength;
vector <double> afXvalue(datalength);
vector <double> afYvalue(datalength);
pair<double,double> coord(int a,int b);
vector< pair<double,double>> coordinates;
int aiDataReal[80];
int count;
//Finding the blobs
// Write hex values of data in to the file
int success = 0;
writefile(fname,soScan,success);
if (success != 0)
{
printf("Error in printing the file");
}
blobdetector(soScan, iProcessedScanCount,Background,coordinates);
// Read the hex value for XY co-ordinate calculation
//readfile(fname,aiDataReal,idx,success);
if (success == -1)
printf("Error in reading the file");
//calculation of Polar Coardinates to XY values
findXY(soScan,afXvalue,afYvalue);
//writing the XY values to the file
writefile( wfname_XY,iDataCount,afXvalue,afYvalue,success);
if (success == -1)
printf("Error in printing the file");
plotdata(afXvalue,afYvalue,coordinates,gp,iProcessedScanCount);
if (!coordinates.empty())
{
//sendcoordinates(soScan,coordinates);
writefile( "coordinates",soScan,coordinates);
coordinates.clear();
}
iProcessedScanCount++;
return iProcessedScanCount;
}
一种简单的方法(在windows上)是使用SetConsoleCtrlHandler
,然后阻止终止,直到您完成工作,当然,在CTRL_CLOSE_EVENT
的情况下,您在Win7/Vista上的时间有限。
您可以使用不同的机制来向您的主程序发出完成其工作的信号。在我的例子中,我在主文件中使用了一个全局变量,通过引用将其传递给我的内部循环,并将其用作循环终止条件。但它也可以用其他方法实现(condition_variable
,…)