首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

问一个很简单的有关问题,变量值变化,但是找不到异常的原因?了,悲剧

2013-06-25 
问一个很简单的问题,变量值变化,但是找不到错误的原因?请教大家了,悲剧啊本帖最后由 wangwei244157887 于

问一个很简单的问题,变量值变化,但是找不到错误的原因?请教大家了,悲剧啊
本帖最后由 wangwei244157887 于 2013-03-12 10:30:22 编辑 我在主程序里面声明了几个指针型变量,然后绑定数组中的几个整型变量


//地址分配
  P_LeftClampIni:=@ReadArr2[2];
  P_LeftClampEnd :=@ReadArr2[3];
  P_RightClampIni:=@ReadArr2[4];
  P_RightClampEnd :=@ReadArr2[5];


然后在主程序定时器里循环读取,数组的值,并判断,如下所示

if P_LeftClampIni^=1 then
 begin 
   Label2.Color :=clRed ;
 end
 else
 begin
   //从来没执行过
   Label2.Color :=clGreen ;
 end;
if P_RightClampIni^=1 then
begin  
     Label3.Color :=clRed ;
end
else
begin
  //从来没执行过
  Label3.Color :=clGreen ;
end;


没有发现P_RightClampIni或者P_LeftClampIni^等于0的情况,可是我在线程里执行的时候
发现P_RighclampIni^或者P_LeftClampIni^都等于0,然后我进行线程中断,发现下列情况,
我的附属线程中的程序片段如下:


while (((GetTickCount-Starttime)<3000)and (P_rightClampIni^=1) and (P_LeftClampIni^=1))  do  

  begin  
  end;
  if (P_RightClampIni^=0) or (P_LeftClampIni^=0) then
  begin
    //一直执行这段程序
     byte_Info :=1;//不执行中断或者在上面的语句执行中断,就执行这行语句
     Synchronize(ShowInfo);
     Exit ;
  end
  else
  begin
    AddBits(2,4,0); 
  end;


当我把中断定位在上面的两个红色地方的时候,发现个奇怪现象,就是如果定位在第一个红色语句的地方,
P_RightClampIni^:=1
P_LeftClampIni^:=1,
然后按F8执行下面的语句,发现值没变,还是为1,执行AddBits(2,4,0); 这个语句
如果中断定位在第二个红色语句的地方,发现
P_RightClampIni^:=0
P_LeftClampIni^:=0,
执行byte_info=1这行语句
然后观察
ReadArr2这个数组里面的值全变为0,很奇怪,应该是有1的值的,这个数组里面含有8个元素

请问这个到底是为什么,查了半天了,找不到原因

*******************************************
不好意思,好像通过查看源码,才可以看到红色语句
[解决办法]
抱歉,你的代码还混着 HTML 标签,差点给弄懵了。

[解决办法]
你把你的定义部分也发来看看,另外 我记得取数组地址的话,好像@ReadArr2[2]这种方法取的都是数据首地址的值,并不是你想要的第几个元素的地址值 ,不知道我记错了没
[解决办法]
不知道你的定时器里执行了什么任务,有可能是资源占用问题吧

把你的代码前加上 Application.ProcessMessages;试试看
[解决办法]
楼主简化一下主要功能然后发上来
[解决办法]
P_LeftClampIni的类型是指向什么(1字节、2字节、4字节?)的指针?
会不会数据越界覆盖了?

热点排行