crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Помогите понять boost::thread
igor_bogomolov
  опции профиля:
сообщение 27.7.2009, 22:58
Сообщение #1


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Всем привет.
Начал потихоньку осваивать boost. Возникло несколько вопросов.

Имею примерно такой код
MSK.h
#include <boost/thread/thread.hpp>

class MSK {
public:
    MSK();
protected:
    static void RoutinePnP();
private:
    boost::thread _pnpthread;
};
MSK.cpp
#include <iostream>
#include <boost/thread/xtime.hpp>

MSK::MSK()
{
    _pnpthread = boost::thread(&RoutinePnP);
}

void MSK::RoutinePnP()
{
    for(;;) {
        std::cout << "PnP run..." << std::endl;

        // приостанавливаем поток на 10 секунд
        boost::xtime xt;
        boost::xtime_get(&xt, boost::TIME_UTC);
        xt.sec += 10;
        boost::thread::sleep(xt);
    }
}
main

int main()
{
    MSK msk;

    std::cout << "message1" << std::endl;
    std::cout << "message2" << std::endl;
    std::cout << "message3" << std::endl;
    std::cout << "message4" << std::endl;

    while(1) sleep(1);
    return EXIT_FAILURE;
}



В результате получаю:
Цитата
PnP run...
message1 \
message2 | Эти сообщения я получаю только через 10 секунд
message3 | т.е. основной поток получается заблоктрованным
message4 /
PnP run...
PnP run...
PnP run...
PnP run...
и т.д....



1) Где и что я делаю не правильно. Почему блокируется основной поток? Или это просто доступ к самой консоли блокируется?
2) Как нормально приостановить поток средствами boost, не привязываясь к системному времени.
3) Что делать если RoutinePnP у меня не может быть статической? Есть ли возможность передать в поток не статический метод класса? Или тут единственный вариант - создавать глобальный метод и делать его дружественным для класса MSK?
--------------------------------------------
4) (не по теме) Где то читал что в boost есть аналог Q_PROPERTY(...), что то не могу найти. (((
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.11.2024, 12:03