我如果纯粹用SOCKET时,没有任何问题,但放进线程就出现问题了,源码如下
Function ThreadProc(lpParameter:Pointer):DWORD;stdcall;
var
Socket: TCustomWinSocket;
MyBuffer:array[0..10000] of byte;{设置接受缓冲区}
MyRecevicelength:integer;
S:string;
MyBmp:TBitmap;
i:integer;
stringtemp:string;
MySize:Longint;
MyStream: TMemorystream; {内存流对象}
begin MyStream := TMemorystream.Create;
MyReceviceLength := socket.ReceiveLength ; {读出包长度}
if MyReceviceLength > 0 then
begin
Socket.ReceiveBuf(MyBuffer, MyReceviceLength); {接收数据包并读入缓冲区内}
MyStream.Write(MyBuffer, MyReceviceLength); {将数据写入流中}
MyStream.Position := 0;
while i<10 do
begin
stringtemp:=stringtemp+inttostr(MyBuffer[i]);
i:=i+1;
end;
showmessage(stringtemp);
end;
end;
procedure TForm1.ServerSocket2ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
ThreadHandle: THandle;
TheThread: DWORD;
begin
ThreadHandle:=0;
try
ThreadHandle:=createthread(nil,0,@ThreadProc,nil,0,TheThread);
finally
if ThreadHandle<>0 then closehandle(ThreadHandle);
end;
end;
Function ThreadProc(lpParameter:Pointer):DWORD;stdcall;
var
Socket: TCustomWinSocket;
MyBuffer:array[0..10000] of byte;{设置接受缓冲区}
MyRecevicelength:integer;
S:string;
MyBmp:TBitmap;
i:integer;
stringtemp:string;
MySize:Longint;
MyStream: TMemorystream; {内存流对象}
begin MyStream := TMemorystream.Create;
MyReceviceLength := socket.ReceiveLength ; {读出包长度}
if MyReceviceLength > 0 then
begin
Socket.ReceiveBuf(MyBuffer, MyReceviceLength); {接收数据包并读入缓冲区内}
MyStream.Write(MyBuffer, MyReceviceLength); {将数据写入流中}
MyStream.Position := 0;
while i<10 do
begin
stringtemp:=stringtemp+inttostr(MyBuffer[i]);
i:=i+1;
end;
showmessage(stringtemp);
end;
end;
procedure TForm1.ServerSocket2ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
ThreadHandle: THandle;
TheThread: DWORD;
begin
ThreadHandle:=0;
try
ThreadHandle:=createthread(nil,0,@ThreadProc,nil,0,TheThread);
finally
if ThreadHandle<>0 then closehandle(ThreadHandle);
end;
end;
//在Form1窗体里
//在uses后type前设置一个const
const
WM_THREADMSG = WM_USER+211;
//在public下写个
procedure WMGetThreadMSG(var Message:TMsg); message WM_THREADMSG; //线程消息procedure TForm1.WMGetThreadMSG(var Message: TMsg);
var
Socket: TCustomWinSocket;
MyBuffer:array[0..10000] of byte;{设置接受缓冲区}
MyRecevicelength:integer;
S:string;
MyBmp:TBitmap;
i:integer;
stringtemp:string;
MySize:Longint;
MyStream: TMemorystream; {内存流对象}
begin
MyStream := TMemorystream.Create;
MyReceviceLength := socket.ReceiveLength ; {读出包长度}
if MyReceviceLength > 0 then
begin
Socket.ReceiveBuf(MyBuffer, MyReceviceLength); {接收数据包并读入缓冲区内}
MyStream.Write(MyBuffer, MyReceviceLength); {将数据写入流中}
MyStream.Position := 0;
while i<10 do
begin
stringtemp:=stringtemp+inttostr(MyBuffer[i]);
i:=i+1;
end;
showmessage(stringtemp);
end;
end;procedure TForm1.ServerSocket2ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
ThreadHandle: THandle;
TheThread: DWORD;
begin
ThreadHandle:=0;
try
ThreadHandle:=createthread(nil,0,@ThreadProc,nil,0,TheThread);
finally
if ThreadHandle<>0 then closehandle(ThreadHandle);
end;
end;----------------------------------
Function ThreadProc(lpParameter:Pointer):DWORD;stdcall;
begin
WM_THREADMSG;
end;
================================================
大概就是这样
begin
WM_THREADMSG;
end;这报错,
在这报错