From 45ba821ec585134c5428ff0c9d80a1d2ba58a2ef Mon Sep 17 00:00:00 2001 From: Martin Fuchs Date: Sat, 2 Apr 2005 10:48:16 +0000 Subject: [PATCH] terminate shell service objects thread if there is nothing to do svn path=/trunk/; revision=14434 --- .../explorer/services/shellservices.cpp | 36 ++++++++++--------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/reactos/subsys/system/explorer/services/shellservices.cpp b/reactos/subsys/system/explorer/services/shellservices.cpp index f24ef636ca2..4b47ce87423 100644 --- a/reactos/subsys/system/explorer/services/shellservices.cpp +++ b/reactos/subsys/system/explorer/services/shellservices.cpp @@ -66,29 +66,31 @@ int SSOThread::Run() RegCloseKey(hkey); } - MSG msg; - - while(_alive) { - if (MsgWaitForMultipleObjects(1, &_evtFinish, FALSE, INFINITE, QS_ALLINPUT) == WAIT_OBJECT_0+0) - break; // _evtFinish has been set. + if (!sso_ptrs.empty()) { + MSG msg; while(_alive) { - if (!PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) - break; + if (MsgWaitForMultipleObjects(1, &_evtFinish, FALSE, INFINITE, QS_ALLINPUT) == WAIT_OBJECT_0+0) + break; // _evtFinish has been set. - if (msg.message == WM_QUIT) - break; + while(_alive) { + if (!PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) + break; - TranslateMessage(&msg); - DispatchMessage(&msg); + if (msg.message == WM_QUIT) + break; + + TranslateMessage(&msg); + DispatchMessage(&msg); + } } - } - // shutdown all running Shell Service Objects - for(SSOVector::iterator it=sso_ptrs.begin(); it!=sso_ptrs.end(); ++it) { - SIfacePtr* sso_ptr = *it; - (*sso_ptr)->Exec(&CGID_ShellServiceObject, OLECMDID_SAVE, OLECMDEXECOPT_DODEFAULT, NULL, NULL); - delete sso_ptr; + // shutdown all running Shell Service Objects + for(SSOVector::iterator it=sso_ptrs.begin(); it!=sso_ptrs.end(); ++it) { + SIfacePtr* sso_ptr = *it; + (*sso_ptr)->Exec(&CGID_ShellServiceObject, OLECMDID_SAVE, OLECMDEXECOPT_DODEFAULT, NULL, NULL); + delete sso_ptr; + } } return 0;