我有一个包含需要作为线程运行的函数的类。执行此操作的正确方法(从我理解的形式)将这些函数声明为static。要使用此类中的方法,我需要一个实例来创建该类,因此我创建了一个在构造函数中初始化为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;
}
}
不是实际的代码,而是让我的问题更清楚。
应用程序实际工作,我用helgrind / memcheck检查它,错误与手头的问题无关。我问这个问题,因为所有解决方案看起来都是解决方法,包括这个。其他人就像医生爱提到的那个,其他使用辅助静态方法。
我想知道我的方法是否会在某个时间点导致史诗般的失败,因为某些原因我不知道,对其他更有经验的程序员来说也很明显。
答案 0 :(得分:0)
在线程中使用它们不需要静态函数。您可以绑定实例函数或传递this指针,或者将C ++ 11与lambda一起使用。
如果使用原始线程,则必须捕获线程中的异常 - 它们不会传播到启动线程的代码。
在C ++ 11中,您可以使用current_exception
和rethrow_exception
传播异常。见here
修改强>
如果每个类型都有一个静态指针,则只能有一个实例,但是代码不会阻止静态指针被重置。为什么首先要打扰一个类实例 - 当然只是传入参数?我认为拥有免费功能来完成这项工作更加清晰。如果您认为这不值得,那就是您的代码。你的同事对你的设计有什么看法?