首页 > 解决方案 > 函数执行期间未定义的行为

问题描述

我正在使用 Win32 API 在 C++ 中编写软件,但是在线程中运行的以下函数提出了一个奇怪的问题,我不知道它的来源。

此功能将用于校准光传感器,它的作用是:

在软件执行期间,DIM 显示为 (0, 48,49,50,51,50,51...)。在调试软件期间,我注意到count_dim变量正在以下行更新:

wsprintfW (wbuf_readhigh, L"%d", get_lux_high);

当我注释掉上述命令时,软件工作正常,它应该以 5% 的步长计算 DİM。我还注意到,如果我更改static int keep_lowto的声明int keep_low,它也纠正了假设的“错误”。

我的问题是,为什么或是什么导致软件出现此问题?我以前从未见过这样的事情。直到几天前,该软件还运行良好。我昨天刚刚在软件中添加了其他新功能,然后就出现了这个问题。请注意,此函数未应用任何全局变量。

我正在使用 CODE::Blocks v17.02 来编译软件。

DWORD WINAPI ThreadCalibrate (LPVOID lpParam)   //THREAD USED FOR CALIBRATE THE SENSOR
{
    unsigned int get_lux_high = 0;
    unsigned int get_lux_low  = 0;
    unsigned int count_dim =0;

    wchar_t wbuf_readhigh [2];
    wchar_t wbuf_readlow  [2];
    wchar_t wbuf_getdim   [2];

    static int keep_low  = Max_SensorRange;    //Static Int variable to hold the lower value
    static int keep_high = Min_SensorRange;    //Static Int variable to hold the higher value

    SetWindowTextW(hcalibrate_status, L"%  CALIBRATING");
    for (count_dim; count_dim <= 100; count_dim +=5)
    {
        Register_Write(EQP_DIM_CONTROL,(int) count_dim, 0x00);
        Sleep(250);

        if (USB_Read(1) < keep_low)   //Compare if USB_Read is lower than keep_low
        {
            keep_low = USB_Read(1);   //Update keep_low
            get_lux_low = keep_low;
        }

        if (USB_Read(1) > keep_high)  //Compare if USB_Read is lower than keep_high
        {
            keep_high = USB_Read(1);  //Update keep_high
            get_lux_high = keep_high;
        }
        wsprintfW( wbuf_readhigh, L"%d", get_lux_high);
        SetWindowTextW(hMax_value, wbuf_readhigh);

        wsprintfW( wbuf_readlow, L"%d", get_lux_low);
        SetWindowTextW(hMin_value, wbuf_readlow);

        wsprintfW( wbuf_getdim, L"%ld", count_dim);
        SetWindowTextW( hCal, wbuf_getdim );
    }
    SetWindowTextW(hcalibrate_status, L"FINISHED" );    //Display Text
    SetWindowTextW( hCal, L" " );
    return 0;
}

标签: c++winapicodeblocks

解决方案


推荐阅读