ThreadIdentifier createThread(const char* name, std::function<void()> entryPoint) { NewThreadContext* context = new NewThreadContext { name, WTFMove(entryPoint), { } }; // Prevent the thread body from executing until we've established the thread identifier. MutexLocker locker(context->creationMutex); return createThreadInternal(threadEntryPoint, context, name); }
ThreadIdentifier createThread(ThreadFunction entryPoint, void* data, const char* name) { // Visual Studio has a 31-character limit on thread names. Longer names will // be truncated silently, but we'd like callers to know about the limit. #if !LOG_DISABLED && PLATFORM(WIN) if (name && strlen(name) > 31) LOG_ERROR("Thread name \"%s\" is longer than 31 characters and will be truncated by Visual Studio", name); #endif NewThreadContext* context = new NewThreadContext(entryPoint, data, name); // Prevent the thread body from executing until we've established the thread identifier. MutexLocker locker(context->creationMutex); return createThreadInternal(threadEntryPoint, context, name); }
/** * Same ThreadTask::createThread(), except it takes a thread type parameter. * * @param enmType The thread type. */ HRESULT ThreadTask::createThreadWithType(RTTHREADTYPE enmType) { return createThreadInternal(enmType); }
/** * Starts the task (on separate thread), consuming @a this. * * The function takes ownership of "this" instance (object instance which calls * this function). And the function is responsible for deletion of "this" * pointer in all cases. * * Possible way of usage: * @code{.cpp} HRESULT hr; SomeTaskInheritedFromThreadTask *pTask = NULL; try { pTask = new SomeTaskInheritedFromThreadTask(this); if (!pTask->Init()) // some init procedure throw E_FAIL; } catch (...) { if (pTask); delete pTask; return E_FAIL; } return pTask->createThread(); // pTask is always consumed @endcode * * @sa createThreadWithType */ HRESULT ThreadTask::createThread(void) { return createThreadInternal(RTTHREADTYPE_MAIN_WORKER); }