临界区
大家都知道临界区、互斥变量等一些技术,它们是为了防止同时修改共享资源发生冲突而出现的,现在我想问,如果A正在访问一个资源C,在这个时候,B也想访问C,由于A正在使用C,那么B是等待A使用在用呢,还是直接跳过不用C了???
线程与Timer
线程与Timer到底有什么区别,我见过很多东东,用timer代替线程的例子,什么时候用线程好,什么时候用Timer好
接口问题
做出一个小的接口程序,代码如下,
IMyable = interface
    ['{F416B266-E13B-41DC-87A8-5AE2FE53272A}']        //此行代码有没有都可以,有与没有它有什么区别
    procedure ShowMsg;
  end;  TMyClass = class(TInterfacedObject, IMyable)
    procedure ShowMsg;
    procedure ShowInfo;
  end;
var
  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
  MC: TMyClass;
  M: IMyable;
begin
  MC := TMyClass.Create;
  M := MC;    //M := TMyClass.Create;就不会出错
  M.ShowMsg;
  MC.Free;  //为什么出错?
end;{ TMyClass }procedure TMyClass.ShowInfo;
begin
  ShowMessage('ShowInfo Method');
end;procedure TMyClass.ShowMsg;
begin
  ShowMessage('ShowMsg Method');
end; 

解决方案 »

  1.   

    这个可以根据自己的需要加锁;
    要是b必须访问c就检测a访问完后
    b访问
    timer跟线程有相似之处
    我觉得有一点是timer事件执行时
    不能强行退出
    线程可以随时挂起或停止
      

  2.   

    应该就像
    form1:=Form2;不行
    一样吧可能他们是对象指针
    必须先创建
      

  3.   

    M:=MC那个问题
    如果你直接要
    M:=MC的效果最好 M:=Pointer(MC);
    可以不用create
    不过两个是不同的class出错也正常
      

  4.   

    1、如果A正在访问一个资源C,在这个时候,B也想访问C,由于A正在使用C,那么B是等待A使用在用呢,还是直接跳过不用C了???
    ///////////////////等待,你可以做个测试,让一个资源永远不释放,那么其他现成的永远不执行
      

  5.   

    timer可以模拟现成,但是占用的资源多,而且并不是所有的都能模拟的了,比如第一个问题...