// Thread의 Execute() 내용입니다.
TList *ItemList;
while (!Terminated)
{
if(FPaused)
{
Sleep(100);
Application->ProcessMessages();
continue;
}
ItemList= FThreadList->LockList();
iCount = ItemList->Count;
// Repeat 버튼 클릭시
while(FRepeatLoop == true && FRepeatItem != NULL)
{
Sleep(0);
Application->ProcessMessages();
if(Terminated)
break;
... 반복 구문 ...
}
}
...
FThreadList->UnlockList();
Sleep(0);
}
안녕하세요.
항상 이곳에서 많은 정보를 얻어가는 초보입니다. ^^
TThreadList와 관련된 질문이 있어서 이렇게 글을 올립니다.
현재 메인에서 Play버튼을 클릭하면 TThread로 새로운 쓰레드를 생성, Resume()하여 위의 Excute()를 실행하도록 했습니다.
그리고 While문으로 Stop버튼을 클릭하기 전까진 계속 무한 Loop가 돌도록 했습니다.
또한 Repeat 버튼을 클릭하면 FRepeatLoop 가 true로 되어 while문 안에 다시 while문으로 들어가도록 했습니다.
TThreadList를 사용하여 List별로 관리되는 Data가 있는데 소스처럼 while문 시작하고 LockList()를 하고 끝나기전 UnlockList()를 합니다.
TThreadList는 쓰레드에서도 사용하고 메인에서도 데이터를 읽기도 합니다.
위 소스 내용으로 구동될 때 Repeat버튼을 클릭하여 while문 안의 while에 들어가면 프로그램이 정지된듯 컨트롤이 안됩니다.
그러나 내부적으로 Loop는 돌고 있습니다.
화면 컨트롤만 안되는 것 같습니다.
TThread를 사용해서 UnlockList전에 메인에서 데이터를 읽으려해서 그런것 같은데 해결 방안이 잘 떠오르지 않습니다.
고수님들 해결방안 좀 부탁드립니다. ^^
읽어 주셔서 감사합니다.
|