c++ - 函数执行期间未定义的行为
问题描述
我正在使用 Win32 API 在 C++ 中编写软件,但是在线程中运行的以下函数提出了一个奇怪的问题,我不知道它的来源。
此功能将用于校准光传感器,它的作用是:
它以 5% 的步长将调光从 0% 增加到 100%;
它比较传感器的最大和最小范围(定义在 中
main.h
);读取的最小值和最大值存储在
get_lux_high
和 中get_lux_low
;最后,这些值在软件窗口中更新。
在软件执行期间,DIM 显示为 (0, 48,49,50,51,50,51...)。在调试软件期间,我注意到count_dim
变量正在以下行更新:
wsprintfW (wbuf_readhigh, L"%d", get_lux_high);
当我注释掉上述命令时,软件工作正常,它应该以 5% 的步长计算 DİM。我还注意到,如果我更改static int keep_low
to的声明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;
}
解决方案
推荐阅读
- javascript - 如何编写自己的 Math.pow 函数?
- javascript - 如何仅从最后一个请求中接收价值?
- android - 验证 PDF 是否已下载并使用 Espresso 显示给用户
- java - 单击 Java Web 应用程序中的菜单时出现错误“无效的用户会话”
- flutter - 如何使用颤振设计下面的用户界面,如下图所示
- html - 无限循环 ik Keycloack 页面
- python - OpenCV 摄像头流适用于 Anaconda/Spyder,但不适用于 VS Code(“无响应”窗口)。他们有什么建议吗?
- javascript - 反应路由。在不同页面上定位组件
- azure-devops - 从命令行使用 Azure 查询
- database-design - Power BI Chord 视觉对象:链接具有相同列名的表