1fa7767c5Sopenharmony_ci/* 2fa7767c5Sopenharmony_ci * Copyright (c) 2021-2021 Huawei Device Co., Ltd. 3fa7767c5Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4fa7767c5Sopenharmony_ci * you may not use this file except in compliance with the License. 5fa7767c5Sopenharmony_ci * You may obtain a copy of the License at 6fa7767c5Sopenharmony_ci * 7fa7767c5Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8fa7767c5Sopenharmony_ci * 9fa7767c5Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10fa7767c5Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11fa7767c5Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12fa7767c5Sopenharmony_ci * See the License for the specific language governing permissions and 13fa7767c5Sopenharmony_ci * limitations under the License. 14fa7767c5Sopenharmony_ci */ 15fa7767c5Sopenharmony_ci 16fa7767c5Sopenharmony_ci#ifndef HISTREAMER_FOUNDATION_OSAL_THREAD_H 17fa7767c5Sopenharmony_ci#define HISTREAMER_FOUNDATION_OSAL_THREAD_H 18fa7767c5Sopenharmony_ci 19fa7767c5Sopenharmony_ci#include <functional> 20fa7767c5Sopenharmony_ci#include <memory> // NOLINT 21fa7767c5Sopenharmony_ci#include <pthread.h> 22fa7767c5Sopenharmony_ci#include <string> 23fa7767c5Sopenharmony_ci 24fa7767c5Sopenharmony_cinamespace OHOS { 25fa7767c5Sopenharmony_cinamespace Media { 26fa7767c5Sopenharmony_cinamespace OSAL { 27fa7767c5Sopenharmony_cienum class ThreadPriority : int { 28fa7767c5Sopenharmony_ci LOW = 9, 29fa7767c5Sopenharmony_ci NORMAL = 16, 30fa7767c5Sopenharmony_ci MIDDLE = 24, 31fa7767c5Sopenharmony_ci HIGH = 32, 32fa7767c5Sopenharmony_ci HIGHEST = 39, 33fa7767c5Sopenharmony_ci}; 34fa7767c5Sopenharmony_ci 35fa7767c5Sopenharmony_ciclass Thread { 36fa7767c5Sopenharmony_cipublic: 37fa7767c5Sopenharmony_ci explicit Thread(ThreadPriority priority = ThreadPriority::HIGH) noexcept; 38fa7767c5Sopenharmony_ci 39fa7767c5Sopenharmony_ci Thread(const Thread&) = delete; 40fa7767c5Sopenharmony_ci 41fa7767c5Sopenharmony_ci Thread& operator=(const Thread&) = delete; 42fa7767c5Sopenharmony_ci 43fa7767c5Sopenharmony_ci Thread(Thread&& other) noexcept; 44fa7767c5Sopenharmony_ci 45fa7767c5Sopenharmony_ci Thread& operator=(Thread&& other) noexcept; 46fa7767c5Sopenharmony_ci 47fa7767c5Sopenharmony_ci virtual ~Thread() noexcept; 48fa7767c5Sopenharmony_ci 49fa7767c5Sopenharmony_ci bool HasThread() const noexcept; 50fa7767c5Sopenharmony_ci 51fa7767c5Sopenharmony_ci void SetName(const std::string& name); 52fa7767c5Sopenharmony_ci 53fa7767c5Sopenharmony_ci bool CreateThread(const std::function<void()>& func); 54fa7767c5Sopenharmony_ci 55fa7767c5Sopenharmony_ciprivate: 56fa7767c5Sopenharmony_ci struct State { 57fa7767c5Sopenharmony_ci virtual ~State() = default; 58fa7767c5Sopenharmony_ci std::function<void()> func{}; 59fa7767c5Sopenharmony_ci std::string name; 60fa7767c5Sopenharmony_ci }; 61fa7767c5Sopenharmony_ci 62fa7767c5Sopenharmony_ci void SetNameInternal(); 63fa7767c5Sopenharmony_ci static void* Run(void* arg); // NOLINT: void* 64fa7767c5Sopenharmony_ci 65fa7767c5Sopenharmony_ci pthread_t id_{}; 66fa7767c5Sopenharmony_ci std::string name_; 67fa7767c5Sopenharmony_ci ThreadPriority priority_; 68fa7767c5Sopenharmony_ci std::unique_ptr<State> state_{}; 69fa7767c5Sopenharmony_ci}; 70fa7767c5Sopenharmony_ci} // namespace OSAL 71fa7767c5Sopenharmony_ci} // namespace Media 72fa7767c5Sopenharmony_ci} // namespace OHOS 73fa7767c5Sopenharmony_ci#endif // HISTREAMER_FOUNDATION_OSAL_THREAD_H 74