| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef BASE_MESSAGE_LOOP_MESSAGE_LOOP_H_ | 5 #ifndef BASE_MESSAGE_LOOP_MESSAGE_LOOP_H_ |
| 6 #define BASE_MESSAGE_LOOP_MESSAGE_LOOP_H_ | 6 #define BASE_MESSAGE_LOOP_MESSAGE_LOOP_H_ |
| 7 | 7 |
| 8 #include <queue> | 8 #include <queue> |
| 9 #include <string> | 9 #include <string> |
| 10 | 10 |
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 187 void PostNonNestableDelayedTask(const tracked_objects::Location& from_here, | 187 void PostNonNestableDelayedTask(const tracked_objects::Location& from_here, |
| 188 const Closure& task, | 188 const Closure& task, |
| 189 TimeDelta delay); | 189 TimeDelta delay); |
| 190 | 190 |
| 191 // A variant on PostTask that deletes the given object. This is useful | 191 // A variant on PostTask that deletes the given object. This is useful |
| 192 // if the object needs to live until the next run of the MessageLoop (for | 192 // if the object needs to live until the next run of the MessageLoop (for |
| 193 // example, deleting a RenderProcessHost from within an IPC callback is not | 193 // example, deleting a RenderProcessHost from within an IPC callback is not |
| 194 // good). | 194 // good). |
| 195 // | 195 // |
| 196 // NOTE: This method may be called on any thread. The object will be deleted | 196 // NOTE: This method may be called on any thread. The object will be deleted |
| 197 // on the thread that executes MessageLoop::Run(). If this is not the same | 197 // on the thread that executes MessageLoop::Run(). |
| 198 // as the thread that calls PostDelayedTask(FROM_HERE, ), then T MUST inherit | |
| 199 // from RefCountedThreadSafe<T>! | |
| 200 template <class T> | 198 template <class T> |
| 201 void DeleteSoon(const tracked_objects::Location& from_here, const T* object) { | 199 void DeleteSoon(const tracked_objects::Location& from_here, const T* object) { |
| 202 base::subtle::DeleteHelperInternal<T, void>::DeleteViaSequencedTaskRunner( | 200 base::subtle::DeleteHelperInternal<T, void>::DeleteViaSequencedTaskRunner( |
| 203 this, from_here, object); | 201 this, from_here, object); |
| 204 } | 202 } |
| 205 | 203 |
| 206 // A variant on PostTask that releases the given reference counted object | 204 // A variant on PostTask that releases the given reference counted object |
| 207 // (by calling its Release method). This is useful if the object needs to | 205 // (by calling its Release method). This is useful if the object needs to |
| 208 // live until the next run of the MessageLoop, or if the object needs to be | 206 // live until the next run of the MessageLoop, or if the object needs to be |
| 209 // released on a particular thread. | 207 // released on a particular thread. |
| 210 // | 208 // |
| 211 // A common pattern is to manually increment the object's reference count | 209 // A common pattern is to manually increment the object's reference count |
| 212 // (AddRef), clear the pointer, then issue a ReleaseSoon. The reference count | 210 // (AddRef), clear the pointer, then issue a ReleaseSoon. The reference count |
| 213 // is incremented manually to ensure clearing the pointer does not trigger a | 211 // is incremented manually to ensure clearing the pointer does not trigger a |
| 214 // delete and to account for the upcoming decrement (ReleaseSoon). For | 212 // delete and to account for the upcoming decrement (ReleaseSoon). For |
| 215 // example: | 213 // example: |
| 216 // | 214 // |
| 217 // scoped_refptr<Foo> foo = ... | 215 // scoped_refptr<Foo> foo = ... |
| 218 // foo->AddRef(); | 216 // foo->AddRef(); |
| 219 // Foo* raw_foo = foo.get(); | 217 // Foo* raw_foo = foo.get(); |
| 220 // foo = NULL; | 218 // foo = NULL; |
| 221 // message_loop->ReleaseSoon(raw_foo); | 219 // message_loop->ReleaseSoon(raw_foo); |
| 222 // | 220 // |
| 223 // NOTE: This method may be called on any thread. The object will be | 221 // NOTE: This method may be called on any thread. The object will be |
| 224 // released (and thus possibly deleted) on the thread that executes | 222 // released (and thus possibly deleted) on the thread that executes |
| 225 // MessageLoop::Run(). If this is not the same as the thread that calls | 223 // MessageLoop::Run(). If this is not the same as the thread that calls |
| 226 // PostDelayedTask(FROM_HERE, ), then T MUST inherit from | 224 // ReleaseSoon(FROM_HERE, ), then T MUST inherit from |
| 227 // RefCountedThreadSafe<T>! | 225 // RefCountedThreadSafe<T>! |
| 228 template <class T> | 226 template <class T> |
| 229 void ReleaseSoon(const tracked_objects::Location& from_here, | 227 void ReleaseSoon(const tracked_objects::Location& from_here, |
| 230 const T* object) { | 228 const T* object) { |
| 231 base::subtle::ReleaseHelperInternal<T, void>::ReleaseViaSequencedTaskRunner( | 229 base::subtle::ReleaseHelperInternal<T, void>::ReleaseViaSequencedTaskRunner( |
| 232 this, from_here, object); | 230 this, from_here, object); |
| 233 } | 231 } |
| 234 | 232 |
| 235 // Deprecated: use RunLoop instead. | 233 // Deprecated: use RunLoop instead. |
| 236 // Run the message loop. | 234 // Run the message loop. |
| (...skipping 413 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 650 | 648 |
| 651 // Do not add any member variables to MessageLoopForIO! This is important b/c | 649 // Do not add any member variables to MessageLoopForIO! This is important b/c |
| 652 // MessageLoopForIO is often allocated via MessageLoop(TYPE_IO). Any extra | 650 // MessageLoopForIO is often allocated via MessageLoop(TYPE_IO). Any extra |
| 653 // data that you need should be stored on the MessageLoop's pump_ instance. | 651 // data that you need should be stored on the MessageLoop's pump_ instance. |
| 654 COMPILE_ASSERT(sizeof(MessageLoop) == sizeof(MessageLoopForIO), | 652 COMPILE_ASSERT(sizeof(MessageLoop) == sizeof(MessageLoopForIO), |
| 655 MessageLoopForIO_should_not_have_extra_member_variables); | 653 MessageLoopForIO_should_not_have_extra_member_variables); |
| 656 | 654 |
| 657 } // namespace base | 655 } // namespace base |
| 658 | 656 |
| 659 #endif // BASE_MESSAGE_LOOP_MESSAGE_LOOP_H_ | 657 #endif // BASE_MESSAGE_LOOP_MESSAGE_LOOP_H_ |
| OLD | NEW |