0

我有内存泄漏,我猜它是由 scoped_lock (Boost) 的错误使用引起的。但是,我无法找到确切的问题,而且我确实相信编写代码的方式也不完全正确。

代码在此类中: http ://taf.codeplex.com/SourceControl/changeset/view/31767#511225

主要的重要方法是ThreadedLoop()。基本上,此方法在线程中启动,并定期检查要为雅虎下载的市场数据。对于每只股票(或其他),将创建一个新线程(用于 ExecuteNextRequest() 方法),将指向包含股票名称的字符串的指针作为参数传递。这是我做的唯一内存分配,但它是在线程执行结束时释放的。

我也会对如何增强此代码感兴趣(当然我可以使用线程池,但这还不是重点)。非常感谢!

4

1 回答 1

0

我建议,不要使用指向 的“原始”指针std::string,而是使用 aboost::shared_ptr<std::string>并传递它。完成后,调用它的reset()函数;它将减少使用计数,并在计数为 0 时自动释放字符串。

作为奖励,您可以将boost::weak_ptr对象附加到这些字符串(您可以将它们粘贴到vector可能),并监控其中有多少仍然“活着”。通过这种方式,您将知道是否有任何原因导致字符串不递减为 0。

要清楚:

if (_tickersQueue.size() > 0)
{
    boost::shared_ptr<std::string> ticker(new std::string(PopNextTicker()));
    if (!ticker->empty())
        _threads.create_thread(boost::bind(&TAFYahooFinanceParadigm::ExecuteNextRequest, this, ticker));
    else
        ticker.reset();  // optional; ticker will drop out of scope anyway
}

是的,您必须适当地调整函数类型ExecuteNextRequest。:-)

于 2009-10-08T02:07:51.747 回答