crossplatform.ru

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


  Ответ в boost::mutex
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
RazrFalcon Дата 25.10.2010, 13:49
  Точно, пример с инета брал, видать кривой попался.
Скомпилило, правда boost::mutex m_mutex; так и подсвечивается :blink: , но это не влияет на компиляцию.
Всем спасибо, буду дальше разбираться.
BRE Дата 25.10.2010, 13:35
  А что это за переменная mutex? В классе threaded_class таких нет, зато есть m_mutex. ;)

class threaded_class
{
        boost::mutex m_mutex;            // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

        void do_work()
        {
                int iteration = 0;
                while (!m_stoprequested &&  iteration<nbFibSteps)
                {
                        int value = fib(++iteration);
                        boost::mutex::scoped_lock l(mutex);        // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                        m_fibonacci_values.push_back(value);
                }
        }

RazrFalcon Дата 25.10.2010, 13:24
  INCLUDEPATH вообще не влияет на компиляцию.
вывод
Running build steps for project untitled...
Starting: "/usr/bin/qmake-qt4" /media/data/Additional/makefiles/untitled.pro -r -spec linux-g++ --version
QMake version 2.01a
Using Qt version 4.7.0 in /usr/lib
The process "/usr/bin/qmake-qt4" exited normally.
Starting: "/media/data/Additional/makefiles/build-wrapper.bash" Release
======== Build Started =========
g++ -c -Wall hello.cpp -o hello.o
hello.cpp: In member function ‘void threaded_class::do_work()’:
hello.cpp:32: error: ‘mutex’ was not declared in this scope
hello.cpp: In constructor ‘threaded_class::threaded_class()’:
hello.cpp:15: warning: ‘threaded_class::nbFibSteps’ will be initialized after
hello.cpp:14: warning: ‘boost::thread threaded_class::m_thread’
hello.cpp:38: warning: when initialized here
make: *** [hello.o] Error 1
======== Build Finished ========
The process "/media/data/Additional/makefiles/build-wrapper.bash" exited normally.
Error while building project untitled (target: Desktop)
When executing build step 'Make'

Если просто пустой проект создать, прописать хедеры, и в где либо написать boost::mutex m_mutex; к примеру, то скомпилится пустой проэкт, при том что без ошибок и варнингов, только подчеркнут будет boost::mutex m_mutex;, при наведении на который будет писаться: "boost::mutex is not a type name" <_<
для наглядности

PS: да, я знаю про 1.44 и ставил уже, но толку 0, поэтому откатился на эти пока.
Iron Bug Дата 25.10.2010, 6:55
 
Цитата(RazrFalcon @ 24.10.2010, 22:51) *
boost 1.42 из репов

зачем 1.42 bp из репов, если уже 1.44 официальный есть?
но сути это не меняет. выше было чётко указано, что надо указать ему заголовки в инклюдах.
у тебя там с путями странность:

Цитата(RazrFalcon @ 24.10.2010, 22:51) *
#include <boost/thread/mutex.hpp>
Цитата(RazrFalcon @ 24.10.2010, 22:51) *
INCLUDEPATH = -I/usr/include/boost


у тебя файлы ищутся в каталоге /usr/include/boost/boost/xxxx. ты уверен, что надо указывать /usr/include/boost, а не /usr/include?
однако, в этом случае компилер обязательно сообщит, что не нашёл файл. не может быть, что не скажет. так что внимательнее читай сообщения компилера.
RazrFalcon Дата 24.10.2010, 19:51
  Пример из инета, суть не меняет в принципе, брал здесь.
Хотя от примера не зависит в прочем.
срр
#include <iostream>
#include <boost/regex.hpp>
#include <boost/bind.hpp>
#include <boost/thread/thread.hpp>
#include <boost/thread/mutex.hpp>
#include <boost/thread.hpp>
#include <boost/thread/condition.hpp>
#include <boost/shared_ptr.hpp>
#include <vector>

class threaded_class
{
        private:
        volatile bool m_stoprequested;
        std::vector<int> m_fibonacci_values;
        boost::mutex m_mutex;
        boost::thread m_thread;
        int nbFibSteps;
        int fib(int num)
        {
                switch(num)
                {
                        case 0: return 0; case 1: return 1;
                        default:
                        return fib(num-2) + fib(num-1);
                };
        }

        void do_work()
        {
                int iteration = 0;
                while (!m_stoprequested &&  iteration<nbFibSteps)
                {
                        int value = fib(++iteration);
                        boost::mutex::scoped_lock l(mutex);
                        m_fibonacci_values.push_back(value);
                }
        }

        public:
        threaded_class()
        : m_stoprequested(false),
nbFibSteps(10),
        m_thread(boost::bind(&threaded_class::do_work, this)) //Note 2
        {}
        ~threaded_class()
        {
        m_stoprequested = true;
        m_thread.join(); //Note 2
}

        int get_fibonacci_value(int _idx)
        {
        boost::mutex::scoped_lock lock(m_mutex);
        return m_fibonacci_values[_idx];
        }
};

int main(int argc, char *argv[])
{
        threaded_class fibcalc;
        fibcalc.get_fibonacci_value(4);
        return 0;
}

QT Creator как IDE + Makefile
Makefile на всякий случай
CC=g++
CFLAGS=-c -Wall
LDFLAGS=
SOURCES=hello.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=hello
LDFLAGS = -L/usr/lib -l boost_regex -l boost_thread
INCLUDEPATH = -I/usr/include/boost

all: $(SOURCES) $(EXECUTABLE)
    
$(EXECUTABLE): $(OBJECTS)
    $(CC) $(LDFLAGS) $(OBJECTS) -o $@

.cpp.o:
    $(CC) $(CFLAGS) $< -o $@



Через консоль тоже безрезультатно. Ubuntu 10.10 + boost 1.42 из репов.
igor_bogomolov Дата 24.10.2010, 18:35
  RazrFalcon, ты пространство имён не забыл указать. В доках есть примеры использования.

В коде будет примерно так
#include <boost/thread/thread.hpp>
#include <boost/thread/mutex.hpp>

int main(int argc, char *argv[])
{
    boost::mutex mutex;
    ...



RazrFalcon Дата 24.10.2010, 16:31
  Начал разбираться с boost, а конкретно с boost thread.
Во многих примерах используется mutex (#include <boost/thread/mutex.hpp>)
Но во время компиляции влазит вечно ошибка error: ‘mutex’ was not declared in this scope
То есть если я набираю boost:: то в вариантах подстановки есть к примеру thread, а mutex нет. Почему?
Из-за этого немогу инициализировать переменную.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 19.4.2024, 20:45