Back to TILs

C++ thread 03

Date: 2024-02-17Last modified: 2024-11-02

Table of contents

void func_1()
{
  fmt::print( "hello from method {}\n", __FUNCTION__ );
}
int main()
{
  try {
    std::thread thread_1( func_1 );
    // I intentionally forgot to join or detach here to produce an error
    // thread_1.join();

    // To protect the execution I will use the thread guard
    // When this object goes out to the context the join() should be called.
    // Even if a exception is thowed
    thread_guard_raii thread_guard_obj( thread_1 );

    // Some processing
    std::this_thread::sleep_for( std::chrono::seconds( 1 ) );

    // Create an error
    fmt::print( "Good by cruel world\n" );
    throw std::runtime_error( "Some error" );

    fmt::print( "This message never should be printed\n" );
  }
  catch( ... ) {
    fmt::print( "Exception captured\n" );
  }
  std::fflush( nullptr );

  return 0;
}

Possible output

RAII Thread Guard Constructor
hello from method func_1
Good by cruel world
RAII Thread Guard Destructor
Thread joined
Exception captured

References