Index: base/threading/thread.h |
=================================================================== |
--- base/threading/thread.h (revision 162015) |
+++ base/threading/thread.h (working copy) |
@@ -2,8 +2,8 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#ifndef BASE_THREAD_H_ |
-#define BASE_THREAD_H_ |
+#ifndef BASE_THREADING_THREAD_H_ |
+#define BASE_THREADING_THREAD_H_ |
#include <string> |
@@ -12,8 +12,18 @@ |
#include "base/message_loop_proxy.h" |
#include "base/threading/platform_thread.h" |
+#if defined(OS_WIN) |
+#include "base/memory/scoped_ptr.h" |
+#endif |
+ |
namespace base { |
+#if defined(OS_WIN) |
+namespace win { |
+class ScopedCOMInitializer; |
+} |
+#endif |
+ |
// A simple thread abstraction that establishes a MessageLoop on a new thread. |
// The consumer uses the MessageLoop of the thread to cause code to execute on |
// the thread. When this object is destroyed the thread is terminated. All |
@@ -57,6 +67,18 @@ |
// before it is destructed. |
virtual ~Thread(); |
+#if defined(OS_WIN) |
+ // Causes the thread to initialize COM. This must be called before calling |
+ // Start() or StartWithOptions(). If |use_mta| is false, the thread is also |
+ // started with a TYPE_UI message loop. It is an error to call |
+ // init_com_with_mta(false) and then StartWithOptions() with any message loop |
+ // type other than TYPE_UI. |
+ void init_com_with_mta(bool use_mta) { |
+ DCHECK(!started_); |
+ com_status_ = use_mta ? MTA : STA; |
+ } |
+#endif |
+ |
// Starts the thread. Returns true if the thread was successfully started; |
// otherwise, returns false. Upon successful return, the message_loop() |
// getter will return non-null. |
@@ -148,7 +170,15 @@ |
} |
private: |
- bool thread_was_started() const { return started_; } |
+#if defined(OS_WIN) |
+ enum ComStatus { |
+ NONE, |
+ STA, |
+ MTA, |
+ }; |
+ ComStatus com_status_; |
+ scoped_ptr<win::ScopedCOMInitializer> com_initializer_; |
+#endif |
// PlatformThread::Delegate methods: |
virtual void ThreadMain() OVERRIDE; |
@@ -187,4 +217,4 @@ |
} // namespace base |
-#endif // BASE_THREAD_H_ |
+#endif // BASE_THREADING_THREAD_H_ |