C ++ Позволяет потоку повышения ждать 1 секунду - PullRequest
8 голосов
/ 22 апреля 2009

Я создал тему повышения, используя: boost :: thread thrd (& connectionThread); где connectionThread - это простая функция void. Это работает нормально, однако, когда я пытаюсь подождать несколько секунд, например, используя:

boost::xtime xt;

boost::xtime_get(&xt, boost::TIME_UTC);

xt.sec += 1;

boost::thread::sleep(xt); // Sleep for 1 second

Программа вылетает в строке xtime_get. Даже при попытке вручную установить xt.sec это не работает. Я пробовал несколько других методов, но я не могу заставить его работать. Я что-то не так делаю? Есть ли более простой способ достичь моей цели?

Ответы [ 3 ]

26 голосов
/ 29 апреля 2009

Есть ли более простой способ

Может быть, что-то вроде этого:

boost::this_thread::sleep(boost::posix_time::seconds(1));

boost::thread::sleep(boost::posix_time::seconds(1));

2 голосов
/ 22 апреля 2009

boost::xtime_get() выглядит как один из немногих API-интерфейсов Boost, который не реализован в заголовке, так что это может быть что-то вроде неправильной компиляции библиотеки Boost. Это, вероятно, похоже на несовпадение соглашений о вызовах или что-то в этом роде. Я не знаю, в первую очередь, какие шаги вам могут понадобиться, чтобы перестроить библиотеку - все, что я когда-либо использовал в Boost, это вещи, которые требуют только заголовки.

Может быть полезно, если вы просто проследите за подпрограммой xtime_get(), даже если она находится на уровне сборки. Структура xtime очень, очень проста, и xtime_get() на самом деле ничего не делает, кроме как вызывает специфичный для платформы API, чтобы получить числа для подключения к структуре xtime.

0 голосов
/ 22 апреля 2009

С этим кодом (не зная, например, где вы его поместили), все, что я могу сказать, - это то, что метод xtime_get возвращает тип возвращаемой меры. То есть, вы должны быть уверены, что, например, верно следующее утверждение:

int res = boost::xtime_get(&xt, boost::TIME_UTC);
assert(res == boost::TIME_UTC);

Может случиться, что в вашей системе это не так.

Однако, глядя на код еще раз, мне приходит в голову, что сбой может быть не связан, в частности, с этим вызовом, а с другими вещами, которые вы делаете в своем приложении. Опять же, это зависит от того, где вы используете этот код. Это в пределах operator() вашей темы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...