在c++/cli控制台应用程序中处理停止或退出事件



我在控制台应用程序中有以下代码,我使用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,…)

相关内容

  • 没有找到相关文章