|
화면에 뿌려줄때는 Thread 연산을 다~~ 끝내고 한번에 뿌려주세요.
음... 연산시간이 너무 길때는 5-10개씩 검색이 완료되면 한번씩 뿌려주던가요.
그럼, 빨라지면서, CPU 리소스도 많이 떨어질 겁니다.
좋은 하루되세요. ^^
void __fastcall CSectionManager::Execute()
{
for (j=0;j < 500;j++)
{
if (ModuleNode->Item[j]->Text.SubString(1,2) == "OK")
continue;
if (FileExists(Filename1)){
blockNodeName.sprintf("Block Number : %05d",j);
} else if (FileExists(Filename)) {
blockNodeName.sprintf("Block Number : %05d",j);
RenameFile(Filename,Filename1);
} else {
continue;
}
//>> 요기 Synchronize(ShowStatus); --> for문 밖으로 나와야 합니다.
}
Synchronize(ShowStatus); --> 일런 식으로 말이죠.
}
이범상 님이 쓰신 글 :
: //---------------------------------------------------------------------------
: void __fastcall CSectionManager::Execute()
: {
: for (j=0;j < 500;j++)
: {
: if (ModuleNode->Item[j]->Text.SubString(1,2) == "OK")
: continue;
:
: if (FileExists(Filename1)){
: blockNodeName.sprintf("Block Number : %05d",j);
: } else if (FileExists(Filename)) {
: blockNodeName.sprintf("Block Number : %05d",j);
: RenameFile(Filename,Filename1);
: } else {
: continue;
: }
: Synchronize(ShowStatus);
: }
: }
: //---------------------------------------------------------------------------
: void __fastcall CSectionManager::ShowStatus(void)
: {
: ModuleNode->Item[j]->Text = blockNodeName;
: }
: //---------------------------------------------------------------------------
:
: 위 소스는 제가 사용하는 스레드 클래스 소스의 일부분입니다.
: 메인폼에는 트리가 있고 트리는 특정디렉토리의 일련번호파일들을 나타내고있습니다.
:
: 메인에서 저 스레드를 생성시키면
: 스레드는 소스에서처럼 두종류파일(Filename, Filename1)을 찾아보고 있으면 Synchronize를 통해서 메인폼의
: 트리에서 해당 노드의 Text속성을 변경시킵니다.
:
: 그런데 이 과정이 속도가 너무 느립니다.
: 화면을 보고 있으면 약 500개 정도의 노드가 있는데 하나씩 변경되는 모습이 보입니다.
:
: 이전에 스레드를 사용하지 않고 메인에서 바로 변경을하면 변경되는 모습을 볼수 없었는데
: 스레드를 사용하니 너무 확연히 보입니다.
:
: 제 생각은 일일이 Synchronize를 들낙날낙해서 속도가 느린것같습니다.
:
: 무슨 연유로 이렇게 느릴까요???
: 고수님들의 답변 부탁드립니다.
:
: 그리고 이걸 해결할 수 있는 방법은 없을까요???
:
: 읽어주셔서 감사합니다. ^^
|