1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef BASE_THREADING_WORKER_POOL_H_ 6 #define BASE_THREADING_WORKER_POOL_H_ 7 #pragma once 8 9 #include "base/base_api.h" 10 #include "base/tracked.h" 11 12 class Task; 13 14 namespace base { 15 16 // This is a facility that runs tasks that don't require a specific thread or 17 // a message loop. 18 // 19 // WARNING: This shouldn't be used unless absolutely necessary. We don't wait 20 // for the worker pool threads to finish on shutdown, so the tasks running 21 // inside the pool must be extremely careful about other objects they access 22 // (MessageLoops, Singletons, etc). During shutdown these object may no longer 23 // exist. 24 class BASE_API WorkerPool { 25 public: 26 // This function posts |task| to run on a worker thread. |task_is_slow| 27 // should be used for tasks that will take a long time to execute. Returns 28 // false if |task| could not be posted to a worker thread. Regardless of 29 // return value, ownership of |task| is transferred to the worker pool. 30 static bool PostTask(const tracked_objects::Location& from_here, 31 Task* task, bool task_is_slow); 32 }; 33 34 } // namespace base 35 36 #endif // BASE_THREADING_WORKER_POOL_H_ 37