У меня проблема с созданием подписчика в Индиго. У меня есть shared_ptr внутри класса, чтобы удерживать объект NodeHandle. Я делаю это так, чтобы NodeHandle можно было использовать в других классах. Проблема заключается в том, когда начинается поток, он, похоже, зависает при вызове make_shared с объектом NodeHandle внутри конструктора MyClass, поскольку он никогда не достигает следующей строки после.Почему NodeHandle висит?
class MyClass
{
private:
std::shared_ptr<ros::NodeHandle> nh;
std::map<std::string, std::string> remap;
// ...
};
MyClass::MyClass()
{
// remap is empty
ros::init(remap, "my_node");
nh = make_shared<ros::NodeHandle>();
cout << "does not reach this line" << endl;
}
int MyClass::run()
{
// ...
}
я начинаю нить Liks так ...
{
// ...
myobj = make_shared<MyClass>();
my_thread = thread(&MyClass::run, myobj);
// ...
}
Мысли?
Я сделал то, что вы сделали, тогда я еще больше упростил свою проблему, поставив ros :: init внутри main, а затем создав экземпляр NodeHandle, а затем подписался, и он все еще зависает (на этот раз не задействованы нити). Вы видите что-то не так с тем, как я использую ros :: init() и пустую карту передается? – Ender
hmmm, он должен работать согласно [this] (http://docs.ros.org/api/roscpp/html/namespaceros.html#a61a193529a9aad90ddace7724c7fc759) ... – Vtik