Я создаю gTEST, в котором я запустил службу с собственным потоком.Перед остановкой сервиса я создал объект класса, имеющий собственный поток.Теперь я хочу, чтобы служебный поток дождался полного разрушения объекта (поток классов выполняет его работу и завершил работу), а затем остановил служебный поток.Если я засыпаю на некоторое время, то все работает хорошо.
Test.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();
}
Class.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();
}