C++继承和具有虚拟工作函数的Pthreads
C++ Inheritance and Pthreads with Virtual Worker Functions
我有一个类,我正试图将其实现为抽象类,以最大限度地提高代码重用性。然而,这两个派生类之间的共同点主要在于,每个派生类都有一个使用者和生产者线程。我想知道是否可以让每个静态成员函数调用一个虚拟成员函数来完成所有底层工作。
基本上,下面的代码是允许的吗?或者我在做一些非常糟糕的事情,或者编译器会对我大喊大叫吗?
// in AbstractClass.h
class AbstractClass {
// some code here including constructors/destructors
protected:
virtual int Worker() = 0; // derived class provides implementation
private:
static void* Thread(void* args);
};
// in AbstractClass.cpp
static void* AbstractClass::Thread(void* args) {
AbstractClass myobject = static_cast<AbstractClass*>(args);
myobject->Worker();
}
基本上,我想知道派生类"worker"是否会被这样称呼?请注意,p_thread_create()是通过传入thread()函数来调用的。
感谢您的帮助,因为我试图提高我对继承和虚拟函数的理解,以及如何使用它来最大限度地提高代码重用。
是的,代码看起来很好,您的假设是正确的。虚拟函数的目的是,无论在哪个超类签名上调用该方法,都将调用函数的最派生版本
使用pthreads和C++,您所使用的方法是完全合理的,而不是简单的。然而,我会在一个单独的类中创建线程,该类将包含静态类方法。这将阻止线程在派生类中混合。
struct ThreadManager
{
ThreadManager(AbstractWorker* worker)
{
mWorker = worker;
mThread = ThreadStart(threadFunc, this); /* made up thread code :) */
}
~ThreadManager()
{
ThreadStop(mThread);
}
static void* threadFunc(void* args)
{
ThreadManager* manager = static_cast<ThreadManager*>(args);
manager->mWorker->Work();
}
AbstractWorker* mWorker;
Thread mThread;
}
请注意,当使用pthreads时,实际上需要一个静态函数。
相关文章:
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++中的memset函数工作不正常
- 将返回值存储在函数指针数组的指针中是如何工作的?
- insertElement() 函数无法按预期工作
- 即使没有调用这个递归函数,它是如何工作的?
- type_info成员函数如何工作?
- 如何定义在用作函数参数时工作的类模板的转换
- 优先级队列构造函数的工作
- 有人可以解释一下这个矩阵幂函数是如何工作的吗?
- 使用移动和复制语义时函数匹配如何工作?
- 这个C++编译器优化(在自身的实例上调用对象自己的构造函数)的名称是什么,它是如何工作的?
- C++代码停止工作错误使用cout内部函数
- 好友函数的工作原理
- 为什么 sizeof(ar)/ sizeof(ar[0]) 在传递给函数时无法在向量上正常工作?
- 以下代码如何工作以每次为唯一调用堆栈唯一实例化模板函数?
- 递归函数调用在后台工作
- 如何使函数在派生类中工作?
- 在下面的代码中,虚函数是如何工作的
- 工作函数重载如何使用可变参数解析?
- C++继承和具有虚拟工作函数的Pthreads