카테고리 없음
[C ++] C ++에서 함수 종료
행복을전해요
2021. 2. 20. 14:26
나는 아마도 스레드를 사용할 것입니다. 작업이 취소되었는지 확인하기 위해 변수를 확인하는 것은 매우 간단해야합니다.
취소 변수에 대한 액세스를 잠 그려면 뮤텍스를 사용하십시오. 그러면 여러 스레드에 대해 적절한 방식으로 읽고 쓸 수 있습니다. 또 다른 옵션은 C ++ 11을 사용하는 경우 원자 변수를 사용하는 것입니다.
큰 쓰기를 더 작은 크기의 블록으로 나눕니다. 8 ~ 64KB가 작동합니다. 각 블록을 작성한 후 취소 변수를 확인하고 설정된 경우 스레드를 종료하십시오.
-------------------실제로 작성을 수행하는 코드를 작업자 스레드에 배치합니다. 공유 변수 (원자 적이거나 뮤텍스에 의해 보호되는 변수)가 있습니다. 작업자 스레드가 반복 할 때마다 값을 확인하도록합니다. 사용자가 "Abort"버튼을 누르면 변수 값을 설정합니다.
당신은 해야 이 긴 실행 작업의 경우 스레드를 사용합니다.
당신이 C ++ 11을 사용하고 있기 때문에 std::atomic<bool>
아마 당신에게 잘 봉사 할 것입니다.
Threaded는 반응 형 GUI를 보장합니다. 그러나 이러한 방식으로 스레드를 사용하는 데에는 학습 곡선이 있습니다.
이를 수행하는 스레드없는 방법은 GUI 스레드의 하드 드라이브에 기록하는 루틴에 있지만 GUI 스레드에 응답을 유지하는 데 시간을주는 것입니다.
QObject::connect(my_cancel_button, SIGNAL(clicked()), file_writer, SLOT(setCanceled()));
// open file for writing
QFile file("filename.txt");
file.open(//... );//
while(still_have_data_to_write && !canceled)
{
write( <1 MB of data> ); // or some other denomination of data
qApp->processEvents();// allows the gui to respond to events such as clicks on buttons
// update a progress bar... using a counter as a ratio of the total file size
emit updateProgressBar(count++);
}
if( canceled )
{
file.close();
// delete the partial file using QDir
}
도움이되기를 바랍니다.
출처
https://stackoverflow.com/questions/22079934