I am beginning to use the **thread** class. 

* In the **main()** thread below, an Example class is created.
* Inside the constructor of Example, two threads are created in the **Example::start()** function.
* **Example::foo()** is designed to print a message every second.
* **Example::bar()** is designed to print a message every 5 seconds.
* Inside the main() function, a loop is designed to print every 3 seconds.
* I decided to not use join() in Example::start() because I would like to have the main() function continuously run.

Why does the main thread crash during run-time?

```
// thread example
#include <iostream>       // std::cout
#include <thread>         // std::thread
#include <chrono>         // std::chrono::seconds
using namespace std;

class Example
{
    public:
        Example();
        void start();
        void foo();
        void bar(int x);
};

Example::Example()
{
    start();
}

void Example::start()
{
    std::thread first (&Example::foo, this);     // spawn new thread that calls foo()
    std::thread second (&Example::bar, this, 5);  // spawn new thread that calls bar(0)

    // synchronize threads:
    //first.join();                // pauses until first finishes
    //second.join();               // pauses until second finishes
}

void Example::foo()
{
    cout << "entered foo()" << endl;
    int count = 0;
      while(1)      {
        std::this_thread::sleep_for (std::chrono::seconds(1));
        ++count;
        cout << "foo() count = " << count << endl;
      }
}

void Example::bar(int x)
{
    cout << "entered bar() x = " << x << endl;
    int count = 0;
    while(1)    {
        std::this_thread::sleep_for (std::chrono::seconds(5));
        ++count;
        cout << "bar() count = " << count << endl;
    }
}

```

---

```
int main() {

  Example* c = new Example();
  cout << "Example() created" << endl;

  while(true) {
     std::this_thread::sleep_for(std::chrono::seconds(3));
     cout << "main() thread loop..." << endl;
  }

  std::cout << "end of main()";
  delete c;

  return 0;
}

```