pthread_thread.cc 945 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. #include "pthread_thread.h"
  2. #include "log.h"
  3. PthreadThread::PthreadThread(ThreadFunc func, void *arg)
  4. : m_data(func, arg)
  5. {
  6. }
  7. PthreadThread::~PthreadThread()
  8. {
  9. // LOG_PRINT("Joining on thread: %d", m_thread);
  10. // pthread_join(m_thread, NULL);
  11. // LOG_PRINT("Joined.");
  12. }
  13. void *PthreadThread::spawnedThreadFunc(void *vp)
  14. {
  15. FuncData *fd = (FuncData*) vp;
  16. fd->func(fd->arg);
  17. return NULL;
  18. }
  19. void PthreadThread::run()
  20. {
  21. LOG_PRINT("Creating thread at func: %p, arg: %p", m_data.func, m_data.arg);
  22. pthread_attr_t attr;
  23. pthread_attr_init(&attr);
  24. pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
  25. pthread_create(&m_thread, &attr, spawnedThreadFunc, &m_data);
  26. }
  27. // Check if pin_thread.cc is included in the build and has
  28. // Thread::Create defined. If so, PthreadThread is not used.
  29. __attribute__((weak)) _Thread* _Thread::create(ThreadFunc func, void *param)
  30. {
  31. return new PthreadThread(func, param);
  32. }