// Copyright (c) 2016 Marshall A. Greenblatt. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the name Chromium Embedded // Framework nor the names of its contributors may be used to endorse // or promote products derived from this software without specific prior // written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // --------------------------------------------------------------------------- // // The contents of this file must follow a specific format in order to // support the CEF translator tool. See the translator.README.txt file in the // tools directory for more information. // #ifndef CEF_INCLUDE_CEF_THREAD_H_ #define CEF_INCLUDE_CEF_THREAD_H_ #pragma once #include "include/cef_task.h" #include "include/internal/cef_thread_internal.h" /// // A simple thread abstraction that establishes a message loop on a new thread. // The consumer uses CefTaskRunner to execute code on the thread's message loop. // The thread is terminated when the CefThread object is destroyed or Stop() is // called. All pending tasks queued on the thread's message loop will run to // completion before the thread is terminated. CreateThread() can be called on // any valid CEF thread in either the browser or render process. This class // should only be used for tasks that require a dedicated thread. In most cases // you can post tasks to an existing CEF thread instead of creating a new one; // see cef_task.h for details. /// /*--cef(source=library)--*/ class CefThread : public CefBaseRefCounted { public: /// // Create and start a new thread. This method does not block waiting for the // thread to run initialization. |display_name| is the name that will be used // to identify the thread. |priority| is the thread execution priority. // |message_loop_type| indicates the set of asynchronous events that the // thread can process. If |stoppable| is true the thread will stopped and // joined on destruction or when Stop() is called; otherwise, the the thread // cannot be stopped and will be leaked on shutdown. On Windows the // |com_init_mode| value specifies how COM will be initialized for the thread. // If |com_init_mode| is set to COM_INIT_MODE_STA then |message_loop_type| // must be set to ML_TYPE_UI. /// /*--cef(optional_param=display_name)--*/ static CefRefPtr CreateThread( const CefString& display_name, cef_thread_priority_t priority, cef_message_loop_type_t message_loop_type, bool stoppable, cef_com_init_mode_t com_init_mode); /// // Create and start a new thread with default/recommended values. // |display_name| is the name that will be used to identify the thread. /// static CefRefPtr CreateThread(const CefString& display_name) { return CreateThread(display_name, TP_NORMAL, ML_TYPE_DEFAULT, true, COM_INIT_MODE_NONE); } /// // Returns the CefTaskRunner that will execute code on this thread's message // loop. This method is safe to call from any thread. /// /*--cef()--*/ virtual CefRefPtr GetTaskRunner() =0; /// // Returns the platform thread ID. It will return the same value after Stop() // is called. This method is safe to call from any thread. /// /*--cef(default_retval=kInvalidPlatformThreadId)--*/ virtual cef_platform_thread_id_t GetPlatformThreadId() =0; /// // Stop and join the thread. This method must be called from the same thread // that called CreateThread(). Do not call this method if CreateThread() was // called with a |stoppable| value of false. /// /*--cef()--*/ virtual void Stop() =0; /// // Returns true if the thread is currently running. This method must be called // from the same thread that called CreateThread(). /// /*--cef()--*/ virtual bool IsRunning() =0; }; #endif // CEF_INCLUDE_CEF_THREAD_H_