Files

49 lines
813 B
C++

#include "Thread.h"
void * ftc::Thread::DoRun(void * arg)
{
try {
((Thread*)arg)->is_running = true;
((Thread*)arg)->Run();
}
catch (...) {
}
((Thread*)arg)->is_running = false;
if (((Thread*)arg)->delete_after_finish)
{
delete ((Thread*)arg);
}
return NULL;
}
void ftc::Thread::Run()
{
}
bool ftc::Thread::Start()
{
pthread_attr_t attr;
if (pthread_attr_init(&attr) != 0)
{
return false;
}
if (pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED))
{
return false;
}
is_running = true;
if (pthread_create(&thread, &attr, &Thread::DoRun, this) != 0)
{
is_running = false;
return false;
}
return true;
}
void ftc::Thread::Perform(Thread *work)
{
work->delete_after_finish = true;
work->Start();
}