0

我有一个包含需要作为线程运行的函数的类。执行此操作的正确方法(按照我的理解)是将这些函数声明为静态。要使用此类中的方法,我需要一个该类的实例,因此我创建了一个静态变量,该变量在构造函数中初始化为 self 。对效率和程序逻辑有什么影响?

class Foo
{
   private: Foo* this_instance;
   Foo()
   {
      this_instance=this;
   }

   void FooBar()
   {
   ...
   }

   static void* Bar()
   {
   if (this_instance==NULL) return 1; //throws are not catched are they?
   this_instance->FooBar();
   return 0;
   }
}

不是实际的代码,而是让我的问题更清楚。

该应用程序确实有效,我用 helmind/memcheck 检查了它,错误与手头的问题无关。我问这个问题是因为所有解决方案似乎都是解决方法,包括这个。其他的就像爱医生提到的那样,其他的使用辅助静态方法。

我想知道我的方法是否会在某个时间点导致史诗般的失败,出于某种我不知道的原因,而对于其他更有经验的程序员来说是显而易见的。

4

1 回答 1

0

您不需要函数是静态的就可以在线程中使用它们。您可以绑定实例函数或传递 this 指针,或将 C++11 与 lambda 一起使用。
如果您使用原始线程,您将不得不在线程中捕获异常 - 它们不会传播到启动线程的代码。 在 C++11 中,您可以使用和
传播异常。看这里current_exceptionrethrow_exception


编辑

如果您对每种类型都有一个静态指针,那么您只能拥有它的一个实例,但您的代码不会阻止静态指针被重置。为什么要首先创建一个类实例——当然只是传递参数?我认为拥有免费功能来完成这项工作更清洁。如果您认为这不值得付出努力,那就是您的代码。您的同事如何看待您的设计?

于 2013-07-31T09:29:11.237 回答