【问题标题】:c++ pthread and pointer to functionc++ pthread和函数指针
【发布时间】:2013-06-25 22:12:25
【问题描述】:

我有一个关于 c++ 函数指针的问题。

我的架构中有 3 个模块:Module AModule BModule C

模块 B 和 C 将由模块 A 创建。

模块 B 具有决定何时停止所有模块的逻辑。

为此,我认为模块 A 可以将指向函数的指针传递给模块 B。 在此函数中,模块 A 将停止模块 B、C,然后是他自己。 这些模块有一个 pthread。

您认为这可能是一个不错的选择吗?

我按照以下步骤操作:

  • 我在表单 A 上创建了一个停止方法;
  • 在模块 B 中,当我把它停止所有模块时,我调用作为指针传递的函数。

如何在表单 B 的构造函数中传递函数指针?

【问题讨论】:

  • 我很难理解您的问题,我强烈建议您发布示例代码,以便更容易正确响应。如果您的场景允许您使用与 C++11 兼容的编译器,我强烈建议您使用 std::thread、std::function 和 lambdas 来更干净地解决这些问题。

标签: c++ pointers pthreads function-pointers


【解决方案1】:

这个想法听起来不错,但是您需要一些变速箱。

让我们播放场景:

B 调用 A::StopAll() A::StopAll() 杀死模块 B 我们在这个函数中返回,模块被杀死。

如果“停止”意味着一些合乎逻辑的事情,这可能会起作用,保持功能完整,并且调用者避免触摸任何东西。但是如果这意味着像卸载b.DLL,你就会遇到问题。

目前还不清楚线程如何播放,可能有类似的问题。

如果你有一些消息泵,从 B 触发的函数应该只是向自己发布一条消息并退出以允许在 B 中完成调用。然后消息执行应该只开始杀死。如果您有多个线程而不是消息泵,您可能需要提醒不同的线程。

【讨论】:

  • 如何在表单 B 的构造函数中传递函数指针?
  • typedef void (tCallback*)();B::B(tCallback cb); B b(KillAll);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-12
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
相关资源
最近更新 更多