我认为我的程序有问题。我必须创建一个与外部跟踪系统持续通信并从中获取点坐标的对象。我将这个类包装在 boost::thread 中,在第一次调用我的 Glut 应用程序之前,我创建了线程对象并将其分离
该类的显着方法的代码如下
boost::mutex resourceMutex;
void Tracker::init()
{
boost::mutex::scoped_lock lock(resourceMutex);
try
{
// some initializations
}
catch (std::bad_alloc const&)
{
cerr << "Memory allocation fail during init!" << endl;
}
try
{
p3dData = (Position3d*)calloc( NUM_MARKERS , sizeof( Position3d ) );
if ( p3dData==NULL )
throw std::bad_alloc();
}
catch ( std::bad_alloc const&)
{
cerr << "Memory allocation fail during memory allocation!" << endl;
}
}
void Tracker::update()
{
boost::mutex::scoped_lock lock(optotrakResourceMutex);
//... operations on vector< Eigen::Vector3d > points
}
vector<Eigen::Vector3d> &Tracker::getAllPoints()
{
return points;
}
我的 glutTimerFunc 调用一个更新函数,每个帧都使用 getAllPoints 方法选择点,而跟踪器线程不断更新它们(实际上访问数据的频率不同,线程调用比 glut 更新函数更快来电。
现在当程序退出时,我首先删除用 new 分配的 Tracker 对象,然后中断包含它的线程,但有时我会得到奇怪的行为,我认为它们是内存泄漏
获取具有不同访问频率的数据和使用 scoped_lock 的方式是否正确,或者我应该在 getAllPoints 方法中设置一些保护措施?