WorkThread.cpp 888 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #include "WorkThread.h"
  2. USING_NS_BF;
  3. WorkThread::WorkThread()
  4. {
  5. mThread = NULL;
  6. mStackSize = 1024 * 1024;
  7. }
  8. WorkThread::~WorkThread()
  9. {
  10. if (mThread != NULL)
  11. Stop();
  12. BfpThread_Release(mThread);
  13. mThread = NULL;
  14. }
  15. static void BFP_CALLTYPE WorkThreadStub(void* param)
  16. {
  17. ((WorkThread*)param)->Run();
  18. }
  19. void WorkThread::Start()
  20. {
  21. mThread = BfpThread_Create(WorkThreadStub, (void*)this, mStackSize, BfpThreadCreateFlag_StackSizeReserve);
  22. }
  23. void WorkThread::Stop()
  24. {
  25. WaitForFinish();
  26. }
  27. void WorkThread::WaitForFinish()
  28. {
  29. if (mThread == NULL)
  30. return;
  31. BfpThread_WaitFor(mThread, -1);
  32. }
  33. bool WorkThread::WaitForFinish(int waitMS)
  34. {
  35. if (BfpThread_WaitFor(mThread, waitMS))
  36. return true;
  37. return false;
  38. }
  39. void WorkThreadFunc::Start(void(*func)(void*), void* param)
  40. {
  41. mParam = param;
  42. mFunc = func;
  43. WorkThread::Start();
  44. }
  45. void WorkThreadFunc::Run()
  46. {
  47. mFunc(mParam);
  48. }