procedure asdfa;
beginend;tid: Cardinal;
BeginThread(nil, 0, @asdfa, nil, 0, tid);就ok了 用不着CreateThread另外 为什么不用Delphi封装的TThread呢 多方便 还比较容易控制同步问题

解决方案 »

  1.   

    const
      Margin = 20;type
      PData = ^TData;
      TData = record
        XPos: Integer;
        YPos: Integer;
      end;
    ______________________________________________________
    function ThreadFunc(Ptr: Pointer): LongInt; stdcall;
    var
      i, j: Integer;
      P: TColorRef;
      DC: HDC;
      Data: PData;
    begin
      Data := PData(Ptr);
      DC := GetDC(Form1.Handle);
      for j := 0 to AHeight do
        for i := Margin to AWidth + Margin do begin
          P := GetPixel(DC, i, j);
          SetPixel(DC, i + Data^.Xpos, Data^.YPos + j, P);
        end;
      ReleaseDC(Form1.Handle, DC);
      Dispose(Data);
    end;
    ____________________________________________________procedure TForm1.StartMenu(Sender: TObject);
    var
      hThread1, hThread2, hThread3: THandle;
      ThreadID: DWORD;
      Data: PData;
    begin
      New(Data);
      Data^.xPos := AWidth;
      Data^.YPos := 0;
      hThread1 := CreateThread(nil, 0, @ThreadFunc,
                               Data, 0, ThreadID);  New(Data);
      Data^.xPos := 0;
      Data^.YPos := AHeight;
      hThread2 := CreateThread(nil, 0, @ThreadFunc,
                               Data, 0, ThreadID);  New(Data);
      Data^.xPos := AWidth;
      Data^.YPos := AHeight;
      hThread3 := CreateThread(nil, 0, @ThreadFunc,
                               Data, 0, ThreadID);  if ((hTHread1 = 0) or (hThread2 = 0) or (hThread3 = 0)) then
        MessageBox(Handle, 'No Thread!', nil, mb_Ok);
    end;我把关键的地方贴出来了,你看看吧
      

  2.   

    原来是我的stdcall关键字没有写的!
      

  3.   

    用Delphi封装的TThread有时候碰到一些麻烦,,,觉得还没直接调用API好,比那个灵活多了