OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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_H_ | 5 #ifndef BASE_MESSAGE_LOOP_H_ |
6 #define BASE_MESSAGE_LOOP_H_ | 6 #define BASE_MESSAGE_LOOP_H_ |
7 | 7 |
8 #include <queue> | 8 #include <queue> |
9 #include <string> | 9 #include <string> |
10 | 10 |
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
161 // The NonNestable variants work similarly except that they promise never to | 161 // The NonNestable variants work similarly except that they promise never to |
162 // dispatch the task from a nested invocation of MessageLoop::Run. Instead, | 162 // dispatch the task from a nested invocation of MessageLoop::Run. Instead, |
163 // such tasks get deferred until the top-most MessageLoop::Run is executing. | 163 // such tasks get deferred until the top-most MessageLoop::Run is executing. |
164 // | 164 // |
165 // The MessageLoop takes ownership of the Task, and deletes it after it has | 165 // The MessageLoop takes ownership of the Task, and deletes it after it has |
166 // been Run(). | 166 // been Run(). |
167 // | 167 // |
168 // PostTask(from_here, task) is equivalent to | 168 // PostTask(from_here, task) is equivalent to |
169 // PostDelayedTask(from_here, task, 0). | 169 // PostDelayedTask(from_here, task, 0). |
170 // | 170 // |
| 171 // The TryPostTask is meant for the cases where the calling thread cannot |
| 172 // block. If posting the task will block, the call returns false, the task |
| 173 // is not posted but the task is consumed anyways. |
| 174 // |
171 // NOTE: These methods may be called on any thread. The Task will be invoked | 175 // NOTE: These methods may be called on any thread. The Task will be invoked |
172 // on the thread that executes MessageLoop::Run(). | 176 // on the thread that executes MessageLoop::Run(). |
173 void PostTask( | 177 void PostTask( |
174 const tracked_objects::Location& from_here, | 178 const tracked_objects::Location& from_here, |
175 const base::Closure& task); | 179 const base::Closure& task); |
176 | 180 |
| 181 bool TryPostTask( |
| 182 const tracked_objects::Location& from_here, |
| 183 const base::Closure& task); |
| 184 |
177 void PostDelayedTask( | 185 void PostDelayedTask( |
178 const tracked_objects::Location& from_here, | 186 const tracked_objects::Location& from_here, |
179 const base::Closure& task, | 187 const base::Closure& task, |
180 base::TimeDelta delay); | 188 base::TimeDelta delay); |
181 | 189 |
182 void PostNonNestableTask( | 190 void PostNonNestableTask( |
183 const tracked_objects::Location& from_here, | 191 const tracked_objects::Location& from_here, |
184 const base::Closure& task); | 192 const base::Closure& task); |
185 | 193 |
186 void PostNonNestableDelayedTask( | 194 void PostNonNestableDelayedTask( |
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
430 | 438 |
431 // Adds the pending task to delayed_work_queue_. | 439 // Adds the pending task to delayed_work_queue_. |
432 void AddToDelayedWorkQueue(const base::PendingTask& pending_task); | 440 void AddToDelayedWorkQueue(const base::PendingTask& pending_task); |
433 | 441 |
434 // Adds the pending task to our incoming_queue_. | 442 // Adds the pending task to our incoming_queue_. |
435 // | 443 // |
436 // Caller retains ownership of |pending_task|, but this function will | 444 // Caller retains ownership of |pending_task|, but this function will |
437 // reset the value of pending_task->task. This is needed to ensure | 445 // reset the value of pending_task->task. This is needed to ensure |
438 // that the posting call stack does not retain pending_task->task | 446 // that the posting call stack does not retain pending_task->task |
439 // beyond this function call. | 447 // beyond this function call. |
440 void AddToIncomingQueue(base::PendingTask* pending_task); | 448 // If |use_try_lock| is true, The function fails if another thread is |
| 449 // queuing or dequeing at that moment. In that case the function returns |
| 450 // false. If |use_try_lock| is false there is no need to check the |
| 451 // return value. |
| 452 bool AddToIncomingQueue(base::PendingTask* pending_task, bool use_try_lock); |
441 | 453 |
442 // Load tasks from the incoming_queue_ into work_queue_ if the latter is | 454 // Load tasks from the incoming_queue_ into work_queue_ if the latter is |
443 // empty. The former requires a lock to access, while the latter is directly | 455 // empty. The former requires a lock to access, while the latter is directly |
444 // accessible on this thread. | 456 // accessible on this thread. |
445 void ReloadWorkQueue(); | 457 void ReloadWorkQueue(); |
446 | 458 |
447 // Delete tasks that haven't run yet without running them. Used in the | 459 // Delete tasks that haven't run yet without running them. Used in the |
448 // destructor to make sure all the task's destructors get called. Returns | 460 // destructor to make sure all the task's destructors get called. Returns |
449 // true if some work was done. | 461 // true if some work was done. |
450 bool DeletePendingTasks(); | 462 bool DeletePendingTasks(); |
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
713 | 725 |
714 } // namespace base | 726 } // namespace base |
715 | 727 |
716 // TODO(brettw) remove this when all users are updated to explicitly use the | 728 // TODO(brettw) remove this when all users are updated to explicitly use the |
717 // namespace | 729 // namespace |
718 using base::MessageLoop; | 730 using base::MessageLoop; |
719 using base::MessageLoopForIO; | 731 using base::MessageLoopForIO; |
720 using base::MessageLoopForUI; | 732 using base::MessageLoopForUI; |
721 | 733 |
722 #endif // BASE_MESSAGE_LOOP_H_ | 734 #endif // BASE_MESSAGE_LOOP_H_ |
OLD | NEW |