有两个线程:A、B先让A执行,执行完毕后,B再执行看到一本书上这么说的,增加语句:B.join 就可以实现但是不明白join是什么意思会不会线程上不安全谢谢

解决方案 »

  1.   

    线程同步时用信号量来做到的,不是用join来的。
      

  2.   

    可以使用信号量解决此问题。
    比如把A、B放入一个列表当中。当信号量有信号时就去列表中取出线程A开始执行。
    当线程A执行完成后。再次置信号量。然后再从列表中取出下一下线程B执行。
    以此类推。
      

  3.   

    楼上很多人都说了用信号灯的方式, 我就贴段代码参考一下吧,呵呵function MyThreadFun(p: Pointer): DWORD; stdcall;
    var
      i,y: Integer;
    begin
      Inc(f);
      y := 20 * f;
      if WaitForSingleObject(hSemaphore, INFINITE) = WAIT_OBJECT_0 then
      begin
        for i := 0 to 1000 do
        begin
          Form1.Canvas.Lock;
          Form1.Canvas.TextOut(20, y, IntToStr(i));
          Form1.Canvas.Unlock;
          Sleep(1); {以免 Canvas 忙不过来}
        end;
      end;
      ReleaseSemaphore(hSemaphore, 1, nil);
      Result := 0;
    end;