15490a39dSopenharmony_ci/* 25490a39dSopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 35490a39dSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 45490a39dSopenharmony_ci * you may not use this file except in compliance with the License. 55490a39dSopenharmony_ci * You may obtain a copy of the License at 65490a39dSopenharmony_ci * 75490a39dSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 85490a39dSopenharmony_ci * 95490a39dSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 105490a39dSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 115490a39dSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 125490a39dSopenharmony_ci * See the License for the specific language governing permissions and 135490a39dSopenharmony_ci * limitations under the License. 145490a39dSopenharmony_ci */ 155490a39dSopenharmony_ci#include "base_thread.h" 165490a39dSopenharmony_ci#include <unistd.h> 175490a39dSopenharmony_ci#include "intell_voice_log.h" 185490a39dSopenharmony_ci 195490a39dSopenharmony_ci#define LOG_TAG "BaseThread" 205490a39dSopenharmony_ci 215490a39dSopenharmony_ciusing namespace std; 225490a39dSopenharmony_ci 235490a39dSopenharmony_cinamespace OHOS { 245490a39dSopenharmony_cinamespace IntellVoiceUtils { 255490a39dSopenharmony_ciBaseThread::BaseThread() : tid_(0), isRuning_(false) 265490a39dSopenharmony_ci{ 275490a39dSopenharmony_ci} 285490a39dSopenharmony_ci 295490a39dSopenharmony_ciBaseThread::~BaseThread() 305490a39dSopenharmony_ci{ 315490a39dSopenharmony_ci if (isRuning_) { 325490a39dSopenharmony_ci pthread_detach(tid_); 335490a39dSopenharmony_ci } 345490a39dSopenharmony_ci} 355490a39dSopenharmony_ci 365490a39dSopenharmony_civoid *BaseThread::RunInThread(void *arg) 375490a39dSopenharmony_ci{ 385490a39dSopenharmony_ci BaseThread *pt = static_cast<BaseThread *>(arg); 395490a39dSopenharmony_ci pt->Run(); 405490a39dSopenharmony_ci 415490a39dSopenharmony_ci return nullptr; 425490a39dSopenharmony_ci} 435490a39dSopenharmony_ci 445490a39dSopenharmony_civoid BaseThread::Start() 455490a39dSopenharmony_ci{ 465490a39dSopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 475490a39dSopenharmony_ci 485490a39dSopenharmony_ci int ret = pthread_create(&tid_, nullptr, BaseThread::RunInThread, this); 495490a39dSopenharmony_ci if (ret != 0) { 505490a39dSopenharmony_ci INTELL_VOICE_LOG_ERROR("create thread failed"); 515490a39dSopenharmony_ci return; 525490a39dSopenharmony_ci } 535490a39dSopenharmony_ci 545490a39dSopenharmony_ci isRuning_ = true; 555490a39dSopenharmony_ci} 565490a39dSopenharmony_ci 575490a39dSopenharmony_civoid BaseThread::Join() 585490a39dSopenharmony_ci{ 595490a39dSopenharmony_ci std::lock_guard<std::mutex> lock(mutex_); 605490a39dSopenharmony_ci 615490a39dSopenharmony_ci if (!isRuning_) { 625490a39dSopenharmony_ci return; 635490a39dSopenharmony_ci } 645490a39dSopenharmony_ci 655490a39dSopenharmony_ci pthread_join(tid_, nullptr); 665490a39dSopenharmony_ci isRuning_ = false; 675490a39dSopenharmony_ci} 685490a39dSopenharmony_ci 695490a39dSopenharmony_cibool BaseThread::IsRuning() const 705490a39dSopenharmony_ci{ 715490a39dSopenharmony_ci return isRuning_; 725490a39dSopenharmony_ci} 735490a39dSopenharmony_ci 745490a39dSopenharmony_cipid_t BaseThread::Gettid() const 755490a39dSopenharmony_ci{ 765490a39dSopenharmony_ci return tid_; 775490a39dSopenharmony_ci} 785490a39dSopenharmony_ci} 795490a39dSopenharmony_ci} 80