[fix] do not use smart pointer to manage std::thread objects

This commit is contained in:
dijunkun
2024-09-02 16:33:01 +08:00
parent 1e5bea2b1e
commit 74e29f25bf
9 changed files with 14 additions and 31 deletions

View File

@@ -10,8 +10,8 @@ unsigned char nv12_buffer_[NV12_BUFFER_SIZE];
ScreenCapturerX11::ScreenCapturerX11() {}
ScreenCapturerX11::~ScreenCapturerX11() {
if (inited_ && capture_thread_->joinable()) {
capture_thread_->join();
if (inited_ && capture_thread_.joinable()) {
capture_thread_.join();
inited_ = false;
}
}
@@ -107,7 +107,7 @@ int ScreenCapturerX11::Destroy() {
}
int ScreenCapturerX11::Start() {
capture_thread_.reset(new std::thread([this]() {
capture_thread_ = std::thread([this]() {
while (running_) {
if (av_read_frame(pFormatCtx_, packet_) >= 0) {
if (packet_->stream_index == videoindex_) {
@@ -131,7 +131,7 @@ int ScreenCapturerX11::Start() {
}
}
}
}));
});
return 0;
}

View File

@@ -77,7 +77,7 @@ class ScreenCapturerX11 : public ScreenCapturer {
struct SwsContext *img_convert_ctx_ = nullptr;
// thread
std::unique_ptr<std::thread> capture_thread_ = nullptr;
std::thread capture_thread_;
std::atomic_bool running_;
};

View File

@@ -10,8 +10,8 @@ unsigned char nv12_buffer_[NV12_BUFFER_SIZE];
ScreenCapturerAvf::ScreenCapturerAvf() {}
ScreenCapturerAvf::~ScreenCapturerAvf() {
if (inited_ && capture_thread_->joinable()) {
capture_thread_->join();
if (inited_ && capture_thread_.joinable()) {
capture_thread_.join();
inited_ = false;
}
}
@@ -113,7 +113,7 @@ int ScreenCapturerAvf::Start() {
}
running_ = true;
capture_thread_.reset(new std::thread([this]() {
capture_thread_ = std::thread([this]() {
while (running_) {
if (av_read_frame(pFormatCtx_, packet_) >= 0) {
if (packet_->stream_index == videoindex_) {
@@ -137,7 +137,7 @@ int ScreenCapturerAvf::Start() {
}
}
}
}));
});
return 0;
}

View File

@@ -82,7 +82,7 @@ class ScreenCapturerAvf : public ScreenCapturer {
struct SwsContext *img_convert_ctx_ = nullptr;
// thread
std::unique_ptr<std::thread> capture_thread_ = nullptr;
std::thread capture_thread_;
std::atomic_bool running_;
};

View File

@@ -275,7 +275,7 @@ int Render::CreateConnectionPeer() {
ConfigCenter::VIDEO_ENCODE_FORMAT::AV1
? true
: false;
params_.enable_turn = true;
params_.enable_turn = false;
params_.on_receive_video_buffer = OnReceiveVideoBufferCb;
params_.on_receive_audio_buffer = OnReceiveAudioBufferCb;
params_.on_receive_data_buffer = OnReceiveDataBufferCb;
@@ -446,20 +446,6 @@ int Render::Run() {
: true;
}
if (!is_create_connection_ && rejoin_ &&
"Failed" == connection_status_str_) {
LeaveConnection(peer_, client_id_);
DestroyPeer(&peer_);
peer_ = CreatePeer(&params_);
if (peer_) {
LOG_INFO("[{}] Create peer instance successful", client_id_);
Init(peer_, client_id_);
LOG_INFO("[{}] Peer init finish", client_id_);
} else {
LOG_INFO("Create peer instance failed");
}
}
if (!inited_ ||
localization_language_index_last_ != localization_language_index_) {
connect_button_label_ =

View File

@@ -198,9 +198,6 @@ void Render::OnConnectionStatusCb(ConnectionStatus status, void *user_data) {
} else if (ConnectionStatus::Failed == status) {
render->connection_status_str_ = "Failed";
render->password_validating_time_ = 0;
render->is_create_connection_ = false;
render->params_.enable_turn = true;
render->rejoin_ = true;
} else if (ConnectionStatus::Closed == status) {
render->connection_status_str_ = "Closed";
render->password_validating_time_ = 0;

View File

@@ -32,7 +32,7 @@ class SpeakerCapturerLinux : public SpeakerCapturer {
private:
bool inited_ = false;
// thread
std::unique_ptr<std::thread> capture_thread_ = nullptr;
std::thread capture_thread_;
};
#endif

View File

@@ -32,7 +32,7 @@ class SpeakerCapturerMacosx : public SpeakerCapturer {
private:
bool inited_ = false;
// thread
std::unique_ptr<std::thread> capture_thread_ = nullptr;
std::thread capture_thread_;
};
#endif