如何让线程等待对象完全破坏?(对象也有一个线程)?
How to make a thread wait for object to completely destruct ? (Object is also having one thread)?
我正在创建一个gTEST,其中我启动了一个拥有自己的线程的服务。在停止服务之前,我创建了具有自己的线程的类的对象。现在我希望服务线程等待对象完全销毁(类线程执行它的工作并退出(,然后停止服务线程。如果我让测试睡眠一段时间,evrything运行良好。
测试.cpp
TEST_F(TestFixture, TestName) {
service->start(); //Sevice is having its own thread
// Creating the Object
DummyClass Obj(); //Object is having its own thread that starts on initialization
EXPECT_CALL(*_Mock,
Func(NotNull(), NotNull(), NotNull(), NotNull(), NotNull(), NotNull()))
.Times(1)
.WillRepeatedly(Return(1));
EXPECT_EQ(true,
Obj.Func1(a,b, c, d)
.IsOk());
usleep(1000); //If I remove the this reason-111: Connection refused.
service->Stop();
}
类.cpp
//Destructor
SasThreadHelper::~SasThreadHelper() {
this->StopThread();
}
//Called in Constructor
void SasThreadHelper::StartThread() {
if (m_thread.get_id() != std::thread::id()) {
return;
}
m_stop_thread_flag = 0;
// spawn the thread
m_thread = std::thread(&SasThreadHelper::ReadMessagesFromQueue,
this);
}
void SasThreadHelper::StopThread() {
m_client_authenticated = 0;
m_stop_sas_thread_flag = 1;
m_thread.join();
}
您可以使用join()
等待线程执行。如果你的测试类加入自己的线程,你可以在析构函数中等待线程完成,如下所示:
class WaitOnOwnThread
{
private:
std::thread t;
public:
WaitOnOwnThread(): t{[](){
std::cout << "Thread starts here" << std::endl;
sleep(2); // thread is doing something
}}
{
}
~WaitOnOwnThread()
{
t.join(); // wait that thread finishes
std::cout << "Thread has finished" << std::endl;
}
};
int main()
{
{
WaitOnOwnThread w;
std::cout << "Do some things in main thread" << std::endl;
} // end of scope for destruction of WaitOnOwnThread
std::cout << "end of main " << std::endl;
}
相关文章:
- 即发即弃 std::线程对象清理自身
- C++:处理线程本地对象销毁
- 结束另一个线程中使用的对象的生存期
- 通过插槽和信号在不同线程中的两个qt对象之间进行通信
- 处理影响跨不同线程共享对象的定时回调的最佳方法是什么?
- 线程调用的函数对对象删除是否安全?
- 将对象传递给多线程对象 Qt
- asio 链对象线程安全吗?
- 如何初始化大线程本地对象?
- 在销毁期间从另一个线程调用对象上调用方法是否未定义行为?
- 当只有一个线程主要使用该对象而其他线程很少使用它时,如何最小化该对象的互斥锁锁定?
- 如何将对象从类线程传递到帖子?
- 将抽象对象从主线程发送到其他线程
- 在 While 循环中重用对象的多线程
- 本地静态函数对象线程安全的初始化
- 对于 c++11 之前的编译器,返回本地静态对象线程是否安全
- 从一个对象线程中使用 const 方法是否安全
- C++流对象线程安全
- 使STL对象线程安全的标准方法
- QT多线程和移动对象线程创建后