Application->ProcessMessages(); 는 쓸데 없으니까 빼시구요
Dialog컴포넌트를 비롯하여 모든 GUI객체는 MainThread(GUI-Thead)에서만 접근해야합니다.
쓰레드에서 Execute를 호출해서 Dialog를 띄우는것은 제대로 동작하지 않습니다.
사용자 에게 파일명 입력이 필요하면 gui-thead에서 받아서
filename을 thread에 넘겨 thread에서는 저장만 하세요
그럼..
성웅 님이 쓰신 글 :
: 멀티스레드를 이용해서 파일저장 속도를 높이고 싶은데요
: 일단은 스레드 한개로 파일만 저장하는 방법을 찾고 있습니다.
:
: 아래 소스처럼 dialog상에서 저장하는 방법을 스레드상에 그대로 적용하였더니 안되네요..
: 혹시, 스레드상에서 파일을 저장하는법 아시는분 답변 부탁드립니다(__)
:
:
:
: void __fastcall Tthread_note1::Execute()
: {
: TStringList* srcFile = new TStringList;
: TStringList* srcData = new TStringList;
:
: if(SaveDialog1->Execute()){
:
: for(int i=0; i<100; i++){
: srcData->Add(save_data[i][0]);
: }
: srcFile->Add(srcData->CommaText);
:
: for(int j=1; j<50; j++){
: Application->ProcessMessages();
: for(int i=0; i<100; i++){
: srcData->Strings[i] = save_data[i][j];
: }
: srcFile->Add(srcData->CommaText);
: }
: }
: srcFile->SaveToFile(SaveDialog1->FileName);
:
: delete srcData;
: delete srcFile;
:
: }
: |