threadvar
zx,zy,word,word2:double;procedure guocheng23();              
Begin
    If (zx>word) and (zy<word2) then
        word:=word+3;             
End;zx,zy是一个线程内的全局变量,zx,zy的值是在另外一个过程guocheng22()中得到的,这样编译的时候会产生内部错误,找了半天的原因,发现如果在guocheng23中再重新声明一个变量zx,zy,就不会产生错误,可是zx,zy这2个变量是全局的,该怎么办呢?
//**********下面是在过程中重新声明后的guocheng23*****************
procedure guocheng23();
Var
zx,zy:double;              
Begin
    If (zx>word) and (zy<word2) then
        word:=word+3;             
End;

解决方案 »

  1.   

    给线程传参
    http://topic.csdn.net/u/20100820/18/8ad25047-86b5-47c3-8e28-c9afda69bc79.html
      

  2.   

    guocheng22()代码贴出来啊,zx,zy到底在哪里声明的?
    在线程里不算全局变量吧?你设置成整个程序的全局变量应该就可以了
      

  3.   

    在 threadvar 内部的 double 不能直接比较,
    换成  If (zx-word >0) and (word2- zy > 0) then
    就可以了。但愿你这代码只是测试用, guocheng22,23,这种命名都有啊。
    word是一个Delphi的简单类型,不要用这样的名字。
      

  4.   


    谢谢,原来double类型不能直接比较啊,我以为他们的类型相同是可以直接比较的呢
      

  5.   

    其实这是一个Delphi的Bug,已经被人提交给CodeGear了,
    这是我在stackoverflow就这个问题的提问,你可以看一下。