For j := 0 To Bmp.HeigHt - 1 Do
    Begin
      P := MainImage.Bitmap.Scanline[j];
      Q := Bmp.Scanline[j];
      For i := 0 To Bmp.Width - 1 Do
      Begin
        Q[i] := P[i];
      End;
    End;这段代码如何用两个线程处理我是这样写的
在主线程里
  Tstruct = Record
    pic:TBitmap;
    src:TZoomImage;
    p, q:PByteArray;
  End;Procedure threadpicsca(Var pb:pstruct); Stdcall;
Var
  i, j              :Integer;
Begin
   If WaitForSingleObject(hMutex, INFINITE) = WAIT_OBJECT_0 Then  Begin
   // CS.Enter;    For j := 0 To pb.pic.Height - 1 Do
    Begin
      pb.p := pb.src.Bitmap.Scanline[j];
      pb.q := pb.pic.Scanline[j];
      For i := 0 To pb.pic.Width - 1 Do
      Begin        pb.Q[i] := pb.q[i];
      End;
        ReleaseMutex(hMutex);    End;
   // CS.Leave;
  End;  // ReleaseSemaphore(hSemaphore, 1, nil);
End;Procedure threadpicsca1(Var pb:pstruct); Stdcall;
Var
  i, j              :Integer;
Begin
   If WaitForSingleObject(hMutex, INFINITE) = WAIT_OBJECT_0 Then  Begin
   // CS.Enter;
    Begin      For j := pb.pic.Height Div 2 + 1 To pb.pic.Height - 1 Do
      Begin
        pb.p := pb.src.Bitmap.Scanline[j];
        pb.q := pb.pic.Scanline[j];
        For i := 0 To pb.pic.Width - 1 Do
        Begin          pb.Q[i] := pb.q[i];
        End;
         ReleaseMutex(hMutex);      End;
     // CS.Leave;
    End;  End;
End;
  struct := GetMemory(SizeOf(Tstruct));
  ZeroMemory(struct, SizeOf(Tstruct));
  pstruct = ^tstruct;
  struct.pic := Bmp;
  struct.src := MainImage;
hMutex := CreateMutex(Nil, False, Nil);
       H1 := CreateThread(Nil, 0, @threadpicsca, @struct, 0, ID);
       H2 := CreateThread(Nil, 0, @threadpicsca1,@struct, 0, ID);老是提示存储空间不足,无法处理此命令

解决方案 »

  1.   


    不是实际size,仅为结构Size,
    结构中的bmp只是一个参考地址integer的size ,不是实体size
      

  2.   

    没看明白楼主要做什么……
    如果有对象,一般不会用GetMemmory来分配内存。直接用正常方式就好了。反正对象也不可能在另一个进程中释放,所以销毁的时候直接用Free释放对象应该不会有问题的。
      

  3.   

    你在主线程里去唤醒2个子线程啊。
    在主线程create方法里初始化子线程,然后把子线程放到对象列表里(TObjectList),遍历,唤醒就ok了。