有一个返回 int 的函数,我如何使用 boost 在单独的线程中运行它?
Posted
技术标签:
【中文标题】有一个返回 int 的函数,我如何使用 boost 在单独的线程中运行它?【英文标题】:Having a function that returns int how can I run it in a separate thread using boost? 【发布时间】:2010-12-07 18:38:13 【问题描述】:我知道这看起来没有必要,但我希望它能帮助我找到内存泄漏。 那么在返回int的类中有一个函数,我如何从该类的另一个函数调用它(调用它以便返回int的函数将在另一个线程中运行)?
【问题讨论】:
您希望 thread1 调用 foo(),但 foo() 的响应显示在 thread2 中? 不,我希望 thread1 调用 foo 以便 foo 在另一个线程中运行并将 int 返回给 thread1 【参考方案1】:您试图通过从另一个线程调用函数来查找函数中的内存泄漏?这就像在大海捞针中添加更多干草一样。
【讨论】:
而且由于潜在的不确定性,有人在搜索针头之间洗牌。 我希望内存泄漏在那个函数中。我希望当函数返回结果并且线程将被删除时操作系统会在我之后清理=) @Kab Thread "deletion"(正如你所说的那样)将简单地展开堆栈,这就是函数返回时发生的情况。内存泄漏意味着您正在调用new
或 malloc()
而没有匹配的 delete
或 free()
。
@Kabumbus:如果这是你的目标,那么你做错了(调试)。调试的目标是删除错误,而不是试图隐藏它以便操作系统在你之后清理(在这种情况下甚至不会发生......线程共享一个堆 - 所以操作系统直到之后才会清理您的进程退出)。找到您的内存泄漏并正确释放内存。这样做的策略有很多。【参考方案2】:
线程编程101:
-
生成一个调用新函数 ("foo") 的新线程 ("thread2")。
在生成后立即让原始线程与 thread2 连接。
读取 foo() 已将其最终值写入的全局变量。
注意 foo() 不能将它的值返回给原来的线程;它必须将值写入某个共享内存(即全局变量)。另请注意,这不会解决您的内存泄漏问题,甚至无法明确您的内存泄漏来自何处。
使用Valgrind 查找内存泄漏。并阅读有关多线程的书籍或教程。
【讨论】:
【参考方案3】:操作系统不会回收工作线程中的内存泄漏。这不是它的工作原理。
修复你的错误。这个世界不再需要垃圾软件了。
【讨论】:
以上是关于有一个返回 int 的函数,我如何使用 boost 在单独的线程中运行它?的主要内容,如果未能解决你的问题,请参考以下文章
如何将一个类成员函数与param作为rvalue绑定到boost :: function? [关闭]
使用 c++ boost::python 从 python 函数返回的列表中获取数据?
boost make_shared接受一个const引用。有办法解决这个问题吗?