【问题标题】:why does thread procedure should be static or member function为什么线程过程应该是静态或成员函数
【发布时间】:2010-09-08 14:27:13
【问题描述】:

为什么线程过程应该是静态或成员函数? 有什么正当理由吗?

【问题讨论】:

  • 没有更具体的上下文编号。顺便说一句,标记 MFC 和 PThreads 的任何特殊原因?我认为同时使用这两个库的情况很少见。

标签: c++ visual-c++ mfc pthreads


【解决方案1】:

非静态成员变量具有编译器内部传递的隐式this 参数。

你有

ClassInQuestion {
   void threadFunc( int );
}

编译器在内部创建一个函数

void ClassInQuestion_threadFunc( ClassInQuestion* thisObject, int );

因此,除非线程过程接受一个指针 t 一个具有ClassInQuestion* 类型的第一个参数的函数,否则它将与预期的函数签名不匹配。

【讨论】:

  • 我也误读了这个问题,但是对于 mfc,以下表明需要一个免费或静态成员函数:go4expert.com/forums/showthread.php?t=3197 和 pthreads (C-API),这似乎很明显,所以我猜这个问题有点草率。
【解决方案2】:

主要是因为非静态成员函数有一个隐含的参数,导致函数指针的填写比较困难。我猜想在指定非静态成员函数时,您还希望对象是已知的,这与函数的工作方式不同。

【讨论】:

    【解决方案3】:

    通常,线程过程必须由具有回调机制的线程库中的预定义函数调用。为了能够调用成员函数(不是静态的),您需要调用该函数的类的对象。但是,没有可用的线程库支持这一点,即它们不接受将用于调用注册函数的对象。所以所有这些函数都应该是静态的并适当地进行类型转换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-28
      • 2012-11-11
      • 2013-01-23
      相关资源
      最近更新 更多