안녕하세요.
Client 의 Thread에서 Data(Stream)를 Acquisition하여 indy를 통해
획득한 Data(Stream)를 생성된 Thread를 통해 Server로 전송하고 있습니다.
1. Acquisition Thread
2. Send Thread
2번째 Send Thread는 데이터를 전송할때 쓰이며, Data를 전송한후 종료 됩니다.
이렇게 무한히 돌리면 대략 1분 정도 후에 Thread Create 하는 부분에 걸리면서
아래의 Error 메세지가 뜹니다.
'Thread Creation Error : 사용가능한 저장소가 부족하여 해당 이 명령을 처리할수 없습니다.'
Thread 생성하는 부분입니다.
<!--CodeS-->
WThread := TWriteThread.Create(IdTCPClient1, TRecord);
WThread.FreeOnTerminate := True;
WThread.Resume;
<!--CodeE-->
Thread 수행/종료하는 부분입니다.
<!--CodeS-->
procedure TWriteThread.Execute;
begin
{ Place thread code here }
While not Terminated do
Try
if not WThreadSock.Connected then
begin
WThread.Suspend;
WThread.Terminate;
end;
WThreadSock.WriteBuffer(SendRecord, Sizeof(SendRecord), true);
WThread.Suspend;
WThread.Terminate;
Except on E: Exception do
begin
if WThreadSock.Connected then
WThreadSock.Disconnect;
Terminate;
end;
end;
end;
<!--CodeE-->
매번 Thread가 제대로 종료 안되서 위와 같은 메세지가 나오는건가요?
관련해서 경험해보신 분 계시면 답변 부탁 드립니다.
그리고, 이와 같이 매번 2번째 Thread를 생성/수행/종료를 안하고,
한번만 생성하여 계속 수행하다가 모든 전송이 끝나면 종료 하는 방법은 없는가요?
좋은 하루보내세요~
그냥 과감히 없애세요 그리고 수집부에 걍 송신하세요.
만약 송신측 대역폭에 여유가 없으면 어차피 스레드 여러개 돌려도 마찬가지입니다.
그리고 수집부에서 데이타가 지속적으로 받아지며 송신과 연계해서는 안된다고
생각되신다면 다음과 같이 하십시요
먼저 수집부에서 데이타를 수신한 후 큐에 쌓고 메세지 발생시켜서 순차적으로
송신해도 됩니다.(일반적으로 전 이렇게 함) 송신시 인디에서 스레드로 송신하니
걱정하시지 말고요(Anti... 컴퍼넌트 이름 까먹었음 하여간 그거 같이 사용해서..)