terminate shell service objects thread if there is nothing to do
authorMartin Fuchs <fuchs.martin@gmail.com>
Sat, 2 Apr 2005 10:48:16 +0000 (10:48 +0000)
committerMartin Fuchs <fuchs.martin@gmail.com>
Sat, 2 Apr 2005 10:48:16 +0000 (10:48 +0000)
svn path=/trunk/; revision=14434

reactos/subsys/system/explorer/services/shellservices.cpp

index f24ef63..4b47ce8 100644 (file)
@@ -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;
+
+                               if (msg.message == WM_QUIT)
+                                       break;
 
-                       TranslateMessage(&msg);
-                       DispatchMessage(&msg);
+                               TranslateMessage(&msg);
+                               DispatchMessage(&msg);
+                       }
                }
-       }
 
-        // shutdown all running Shell Service Objects
-       for(SSOVector::iterator it=sso_ptrs.begin(); it!=sso_ptrs.end(); ++it) {
-               SIfacePtr<IOleCommandTarget>* 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<IOleCommandTarget>* sso_ptr = *it;
+                       (*sso_ptr)->Exec(&CGID_ShellServiceObject, OLECMDID_SAVE, OLECMDEXECOPT_DODEFAULT, NULL, NULL);
+                       delete sso_ptr;
+               }
        }
 
        return 0;