我强烈建议不要将函数指针转换为void *
指针,因为在 c++ 和可能的 c 中,大小可能不同。
总的来说,您的解决方案不是很 C++。诚然,使用 ac 库有点棘手。这是我在当前项目中使用的方法:-
class ThreadBase
{
public:
ThreadBase ()
{
}
virtual ~ThreadBase ()
{
// TODO - inform thread to stop, using a message or a signal or something
// and then wait for the thread to terminate
void
*return_value = 0;
pthread_join (m_thread_handle, &return_value);
}
void Run ()
{
if (pthread_create (&m_thread_handle, 0, ThreadFunction, this))
{
// error - throw an exception or something
}
}
private:
static void *ThreadFunction (void *param)
{
ThreadBase
*thread = static_cast <ThreadBase *> (param);
thread->Main ();
return 0;
}
virtual void Main () = 0;
private:
pthread_t
m_thread_handle;
};
然后从 ThreadBase 派生实现特定版本:
class SomeThread : public ThreadBase
{
private:
void Main ()
{
// do something
}
};
您可能想要更改Main
以返回退出代码并将其从线程传回。Main
如果它处于无限循环中(例如,如果它是一个正在消耗某种消息的侦听器),您需要一种方法来退出。