#include <signal.h>
#include <iostream>
#include <VDream/Log/VLogStdout.h>
#include <VDream/Common/VThread.h>

__thread VThread* g_thread = NULL;
void sig_handler(int signum)
{
  LOG_ERROR("sig_handler() received signal %d\n", signum);
  LOG_ERROR("name=%s tag=%d", qPrintable(g_thread->name), g_thread->tag);
  throw "hahaha";
  sleep(10);
  //exit(0);
}

using namespace std;

class MyThread : public VThread
{
public:
  virtual void run()
  {
    try {
      g_thread = this;
      tag = 5555;
      LOG_INFO("111");
      tag = 666;
      int a = 5;
      LOG_INFO("222");
      tag = 7777;
      int b = 0;
      LOG_INFO("333");
      tag = 8888;
      int c = a / b;
      LOG_INFO("444");
      cout << c << endl;
    } catch (...) {
      cout << "ooooooooooooops\n";
    }
  }
};

int main()
{
  VLog::changeLog(new VLogStdout);
  LOG_INFO("main beg");
  signal(SIGFPE, sig_handler);
  MyThread thread;
  g_thread = &thread;
  thread.run();
  //thread.open();
  //thread.close();
  LOG_INFO("main end");
}