|
갈은 이야기가 계속 반복되고 있네요.
Threadlist는 thread 내부에서 동기화 처리를 위한 자료 구조입니다.
동기화가 필요 없으면.. 쓸 이유가 전혀 없어요.
그 동기화 처리는..
locklist 와 unlocklist 가 핵심이고요
사용 방법은 님이 올리신 예제에 다 나와 있어요..
그게 다 입니다.
나머진 List 로써 필요한 기능은..
반환되는 TList 에서 가져다 쓰면 되고요.
이게 이해 안된다면..
Thread 동기화 부분을 전혀 이해하고 있지 못한걸로 보이네요..
똑똑 님이 쓰신 글 :
: 이해가 되질 않는게
: 클라이언트들의 목록이 List에 들어갑니다
: 근데왜또 TThreadList가 필요한거죠?
: TList와 TThreadList의 기능이 조금달라서
: TList의 기능 몇개, TThreadList에 기능몇개
: 사용하기위해서 두개나 불러다가 사용하는것인지요
: 거기다가 결정적인게 두개를 불러서 어떻게 사용해야될지 감도 안오네요 ㅠㅠ
: 힌트좀 주시면 감사하겠습니다
:
: Intotheblue 님이 쓰신 글 :
: : 결과적으로 두개가 필요한게 맞습니다.
: : 님이 올리신 예제 보면..
: : 거기에 님이 필요로 하는 내용은 다 있는데요..
: :
: : : : : List = IdTCPServer1->Contexts->LockList() ; ==> list 가져오고..
: : : : :
: : : : : try
: : : : : {
: : : : : for(Loop =0;Loop<List->Count;Loop++) ==> count는 여기 있고요..
: :
: :
: :
: :
: : 똑똑 님이 쓰신 글 :
: : : 이해가 잘되지않는데 Count멤버변수를 사용할려면 어떻게 사용해야되는건가요?
: : : TList, TThreadList 두개가 필요한건 아니죠?
: : : 이제막 프로그래밍시작한 초보라 양해부탁드립니다
: : :
: : : Intotheblue 님이 쓰신 글 :
: : : : 반환해 주는 TList* 를 가지고 이용하면 됩니다.
: : : :
: : : : ThreadList 는 Thread 사용시 동기화 처리때문에..
: : : : lock 과 unlock 을 제공해 주는 역활을 하죠.
: : : : 나머지는 List 에 필요한것은. 반환되는 TList 로 쓰시면 됩니다.
: : : :
: : : : 올려놓으신 예제를 보면 알수 있을겁니다.
: : : :
: : : : 똑똑 님이 쓰신 글 :
: : : : : void __fastcall TForm1::SandToAll(AnsiString Text)
: : : : : {
: : : : : TList *List;
: : : : : TIdContext *AContext;
: : : : : int Loop;
: : : : : List = IdTCPServer1->Contexts->LockList() ;
: : : : :
: : : : : try
: : : : : {
: : : : : for(Loop =0;Loop<List->Count;Loop++)
: : : : : {
: : : : : AContext = (TIdContext *) List->Items[Loop];
: : : : : AContext->Connection->IOHandler->WriteLn(Text);
: : : : : }
: : : : : }
: : : : : __finally
: : : : : {
: : : : : IdTCPServer1->Contexts->UnlockList();
: : : : : }
: : : : : }
: : : : : //---------------------------------------------------------------------------
: : : : : void __fastcall TForm1::IdTCPServer1Execute(TIdContext *AContext)
: : : : : {
: : : : :
: : : : : AnsiString Temp ;
: : : : : Temp = AContext->Connection->IOHandler->ReadLn();
: : : : : SandToAll(Temp);
: : : : : }
: : : : :
: : : : : TList는 쓰레드에서는 TThreadList로 대체해서 사용해야된다고 들었는데
: : : : :
: : : : : TList를 TThreadList로 마냥 대체할려고하니깐 오류가 발생하네요
: : : : : TThreadList에서는 Count멤버변수도 없고
: : : : : IdTCPServer1->Contexts->LockList() 는 TList* 를 리턴해주는데 어떻게 해야될지 감이 안잡힙니다
|