Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> boost::thread::sleep 
:(
    Опции темы
cthutq
Дата 11.8.2006, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 16.4.2006

Репутация: нет
Всего: нет



в потоке использую
Код

boost::xtime xtime = {1000, 0};
boost::thread::sleep(xtime);


нифига не работает. Почему ?
PM MAIL   Вверх
En_t_end
Дата 12.8.2006, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: 1
Всего: 20



cthutq, 
Сразу скажу, бустом не пользовался. Но с подобной проблемой встречался. Посмотри доки на бустовский слип. Тебе нужно знать, в каких еденицах он работает, микросекунды или милисекунды.
PM MAIL ICQ Skype GTalk Jabber   Вверх
Любитель
Дата 12.8.2006, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Неправильное использование структуры xtime. В текущей версии Boost.Thread используется этот не очень удобный и ктому же несколько платформозавсимый тип (сами разработчики в доках обещают когда-нибудь заменить его на более робустный тип, который должен появиться в бусте).
Делаем так:
Код

#include <boost/thread/thread.hpp>
#include <boost/thread/xtime.hpp>

#include <iostream>

void test()
{
    boost::xtime xtime;
    boost::xtime_get(&xtime, boost::TIME_UTC);
    xtime.sec += 3;
    boost::thread::sleep(xtime);
    std::cout << "Test completed!" << std::endl;
}

int main()
{
    boost::thread thread(&test);
    thread.join();
}

Т. е. всегда вначале вызываем boost:xtime_get, ей передаём указатель на структуру и енумовскую константу boost::TIME_UTC. Этот енум в текущей версии (1.33.1) имеет только одно значение (TIME_UTC). После такого шаманства добавляем к полям sec и nsec нужное время. Усё.


--------------------
PM MAIL ICQ Skype   Вверх
cthutq
Дата 12.8.2006, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 16.4.2006

Репутация: нет
Всего: нет



да - как-то странно

более того xtime имеет sec и nsec. Но слип как правилт исльзуется в msec

получается что надо постоянно переводить из msec в sec и nsec ?
PM MAIL   Вверх
Любитель
Дата 12.8.2006, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



В папочке буста можно найти файл libs\thread\test\util.inl, в нём есть функция delay, принимающая три параметра - секунды, милисекунды и наносекунды (2 последних по дефолту - 0), возвращает xtime. Можно внаглую копирнуть и юзать эту функцию. Удобно, хотя на мой взгляд был смысл сделать её конструктором xtime. Тогда проехало такое
Код

boost::thread::sleep(boost::xtime(2, 10));

Как вариант - создать собственный класс (наследуемый) с таким конструктором. Другой вариант - написать в комитет буста с предложением smile.


--------------------
PM MAIL ICQ Skype   Вверх
cthutq
Дата 12.8.2006, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 16.4.2006

Репутация: нет
Всего: нет



кстати - работает если тользо задавать в sec. Если еще добавляю и nsec - не работает
PM MAIL   Вверх
Любитель
Дата 12.8.2006, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Если посмотреть на файлик, указанный мною выше имеем: xtime.nsec = nsec, а не +=. Глупо, как-то, но что сделаешь smile


--------------------
PM MAIL ICQ Skype   Вверх
cthutq
Дата 12.8.2006, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 16.4.2006

Репутация: нет
Всего: нет



Цитата(Любитель @  12.8.2006,  11:44 Найти цитируемый пост)
В папочке буста можно найти файл libs\thread\test\util.inl, в нём есть функция delay, принимающая три параметра - секунды, милисекунды и наносекунды (2 последних по дефолту - 0), возвращает xtime

да - есть такое. Но не накладно ли возвращать по значению ? все-таки потоки smile
PM MAIL   Вверх
cthutq
Дата 12.8.2006, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 16.4.2006

Репутация: нет
Всего: нет



спасибо - вроде заработало smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0476 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.