* Added "bool wait" parameter to ModelLoader::Abort(), allowing to optionally
wait for the loader thread. * MainWindow::Quit() aborts the loader now. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30425 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -106,6 +106,9 @@ printf("MSG_MODEL_LOADED_FAILED/MSG_MODEL_LOADED_ABORTED\n");
|
|||||||
void
|
void
|
||||||
MainWindow::Quit()
|
MainWindow::Quit()
|
||||||
{
|
{
|
||||||
|
if (fModelLoader != NULL)
|
||||||
|
fModelLoader->Abort(true);
|
||||||
|
|
||||||
fSubWindowManager->Broadcast(B_QUIT_REQUESTED);
|
fSubWindowManager->Broadcast(B_QUIT_REQUESTED);
|
||||||
be_app->PostMessage(MSG_WINDOW_QUIT);
|
be_app->PostMessage(MSG_WINDOW_QUIT);
|
||||||
|
|
||||||
|
|||||||
@@ -84,10 +84,7 @@ ModelLoader::ModelLoader(DataSource* dataSource,
|
|||||||
|
|
||||||
ModelLoader::~ModelLoader()
|
ModelLoader::~ModelLoader()
|
||||||
{
|
{
|
||||||
if (fLoaderThread >= 0) {
|
Abort(true);
|
||||||
Abort();
|
|
||||||
wait_for_thread(fLoaderThread, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
delete fDataSource;
|
delete fDataSource;
|
||||||
delete fModel;
|
delete fModel;
|
||||||
@@ -128,14 +125,22 @@ ModelLoader::StartLoading()
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
ModelLoader::Abort()
|
ModelLoader::Abort(bool wait)
|
||||||
{
|
{
|
||||||
AutoLocker<BLocker> locker(fLock);
|
AutoLocker<BLocker> locker(fLock);
|
||||||
|
|
||||||
if (!fLoading || fAborted)
|
if (fLoaderThread < 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
fAborted = true;
|
thread_id thread = fLoaderThread;
|
||||||
|
|
||||||
|
if (fLoading)
|
||||||
|
fAborted = true;
|
||||||
|
|
||||||
|
locker.Unlock();
|
||||||
|
|
||||||
|
if (wait)
|
||||||
|
wait_for_thread(thread, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ public:
|
|||||||
~ModelLoader();
|
~ModelLoader();
|
||||||
|
|
||||||
status_t StartLoading();
|
status_t StartLoading();
|
||||||
void Abort();
|
void Abort(bool wait);
|
||||||
|
|
||||||
Model* DetachModel();
|
Model* DetachModel();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user