您的位置:程序门 -> delphi -> windows sdk/api



大家快来看看,今天见鬼了~~~reasesemaphore函数


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


大家快来看看,今天见鬼了~~~reasesemaphore函数
发表于:2007-10-31 16:44:56 楼主
今天使用reasesemphore函数,遇到闹鬼的事,换了好几台机器结果都是一样,诡异~~~
有问题的地方就是fun1函数中的r2:=   releasesemaphore(shandle1,2,x);,只要前或后有对布尔变量的判断,x就能带回正确的值,若没有,就只能是nil~~~~大家帮忙看看这是怎么回事啊?

unit   unit1;

interface

uses
    windows,   messages,   sysutils,   variants,   classes,   graphics,   controls,   forms,
    dialogs,   stdctrls;

type
    tform1   =   class(tform)
        memo1:   tmemo;
        procedure   formcreate(sender:   tobject);
        procedure   formclose(sender:   tobject;   var   action:   tcloseaction);
    private
        {   private   declarations   }
    public
        {   public   declarations   }
    end;

procedure   fun1();stdcall;

var
    form1:   tform1;
    shandle1,thandle1,thandle2:   thandle;
    dw:   cardinal;

implementation

{$r   *.dfm}

procedure   tform1.formcreate(sender:   tobject);
begin
    shandle1:=   createsemaphore(nil,3,4,'sss');
    thandle1:=   createthread(nil,0,@fun1,nil,0,dw);
end;

procedure   tform1.formclose(sender:   tobject;   var   action:   tcloseaction);
begin
    closehandle(shandle1);
    closehandle(thandle1);
end;

procedure   fun1();stdcall;
var   r1,r2:   boolean;
        a:integer;
        x:   pinteger;
begin

    a:=waitforsingleobject(shandle1,infinite);
    //if   r1   then   //如果没有这句话,x的值就不正常。r1和r2应该没有什么关系,但却影响函数的执行结果。
    form1.memo1.lines.add('fun1-leave');
   
    r2:=   releasesemaphore(shandle1,2,x);

    form1.memo1.lines.add(inttostr(integer(x)));

end;


end.
发表于:2007-10-31 16:56:361楼 得分:0
跟踪看看
发表于:2007-10-31 16:56:562楼 得分:0
呵呵,
这是delphi编译器的事情。
如果你使用类似这样的语句。
r2:=       releasesemaphore(shandle1,2,x);  
但是在整个过程中没有使用这个变量的话,
那么这个赋值语句就不会执行。
这就是编译器优化。
发表于:2007-10-31 20:54:183楼 得分:0
问题是我判断的是r1啊~~~

if   r1   then

跟r2八竿子打不着,可是没有这个if判断,而且没有判断布尔值的话,也是能带回正确的值地~~~比如:if   x <> nil,得不到正确的值,必须得   if   <布尔变量>   then  
发表于:2007-10-31 22:12:534楼 得分:0
你在使用这些局部变量之前都给定初值试试。
应该是编译器的问题。
发表于:2007-11-01 09:25:315楼 得分:0
问题已解决   ,谢谢大家


快速检索

最新资讯
热门点击