인디 서버를 쓰고 있구요
서버가 여러개의 쓰레드를 IdThreadMgrDefault1 를 통해 관리하고 있습니다.
각각의 쓰레드에는 Data란 곳에 클래스를 만들어 이름, 점수 , 닉네임등의 자료를 가지고 있구요...
여기서 문제는 서버가 관리하는 모든 쓰레드에서
(그 쓰레드가 가지고 있는 클래서의 변수 ) UserRoomNum 이 공백이면 어떤작업을 실행할려고 합니다.
procedure TForm1.MakeRoomList(AThread: TIdPeerThread);
var
Client : TClientInfo;
List : TList;
Loop : Integer;
stTemp : String;
begin
Client:= Pointer(AThread.Data);
List:= IdTCPServer1.Threads.LockList;
Try
For Loop:= 0 to List.Count-1 do Begin
IF Client.UserRoomNum <> '' then
Memo3.Lines.Add(Format('packet*%s*%s*%s*', [Client.UserPartX, Client.UserID, Client.UserRoomNum]));
End;
Finally
IdTCPServer1.Threads.UnlockList;
End;
end;
여기서 Client:= Pointer(AThread.Data); 이 부분이 하나의 쓰레드를 지칭하는거 같아 위 코드가 잘못된거 같은데..
어떻게 하면 좋을까요?
|