bbthread.cpp 577 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #include "bbthread.h"
  2. std::atomic_int bbThread::next_id{1};
  3. thread_local int bbThread::current_id{1};
  4. int bbThread::start( bbFunction<void()> entry ){
  5. int id=++next_id;
  6. running=true;
  7. thread=std::thread( [=](){
  8. bbGCThread gcThread;
  9. gcThread.link();
  10. bbDBContext dbContext;
  11. dbContext.init();
  12. bbDB::currentContext=&dbContext;
  13. current_id=id;
  14. entry();
  15. running=false;
  16. bbDB::currentContext=nullptr;
  17. gcThread.unlink();
  18. } );
  19. return id;
  20. }
  21. void bbThread::detach(){
  22. thread.detach();
  23. }
  24. void bbThread::join(){
  25. thread.join();
  26. }