问题描述
我正在使用Win32 API用C ++编写软件,但是在线程中运行的以下函数提出了一个奇怪的问题,我不知道其来源。
此功能将用于校准光传感器,它的作用是:
-
以5%的幅度将调光从0%增加到100%;
-
它比较传感器的最大和最小范围(在
main.h
中定义); -
读取的最小值和最大值存储在
get_lux_high
和get_lux_low
中; -
最后,这些值将在软件窗口中更新。
在软件执行期间,DIM显示为(0,48,49,50,51,51 ...)。在调试软件期间,我注意到count_dim
变量正在以下行中更新:
wsprintfW (wbuf_readhigh,L"%d",get_lux_high);
当我注释掉上述命令时,该软件可以按5%的步数计算DİM。我还注意到,如果将static int keep_low
的声明更改为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,get_lux_high);
SetwindowTextW(hMax_value,wbuf_readhigh);
wsprintfW( wbuf_readlow,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;
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)