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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Потоки, работающие кроссплатформенно.. треды, кои используются под разными ОС 
:(
    Опции темы
Proger10
Дата 10.7.2009, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



vinick, не пойму с классом.. http://paste.org.ru/?96j7qg - оно мне выдаёт на компайле:
Код
$ g++ main.cpp -lglut -lboost_thread-mt `pkg-config opencv --cflags --libs`
main.cpp: In member function 'void OpenGLClass::initGlutWindow()':
main.cpp:83: error: argument of type 'void (OpenGLClass::)()' does not match 'void (*)()'
main.cpp:84: error: argument of type 'void (OpenGLClass::)(unsigned char, int, int)' does not match 'void (*)(unsigned char, int, int)'
main.cpp:85: error: argument of type 'void (OpenGLClass::)(int, int)' does not match 'void (*)(int, int)'
main.cpp: In function 'int main(int, char**)':
main.cpp:119: error: 'OpenGL' has not been declared
make: *** [all] Error 1


Добавлено через 3 минуты и 40 секунд
Упс, там про ошибку на 119 строке, ессно так: boost::thread myThread1( boost::bind( &OpenGLClass::initGlutWindow, c ) );

Ну да всё равно. К чему мы передаём в функцию initGlutWindow параметр экземпляра класса? Это точно верная форма вызова?? Очень подозрительная форма вызова: "OpenGLClass::initGlutWindow" smile
PM MAIL   Вверх
AlexT84
Дата 10.7.2009, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(vinick @ 10.7.2009,  14:49)
Можно при помощи boost::bind

Можно и без бинда
Код

class Myclass
{
   public:
      void drawScene() {}
      void operator ()(void)
      {
           drawScene();
      }
};
int main()
{
     MyClass c;
     boost::thread t(c);
}


PM MAIL   Вверх
vinick
Дата 10.7.2009, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Proger10 @  10.7.2009,  15:24 Найти цитируемый пост)
Что-то не особо заметны номера строк.. smile http://pastebin.ca/1490636

Заметны
Цитата

#
==21878== Invalid read of size 8
#
==21878==    at 0x6C55209: (within /usr/lib64/opengl/nvidia/lib/libGL.so.185.18.14)
#
==21878==    by 0x402425: initOpenCVWindow() (main.cpp:101)  <-------------------


Добавлено через 4 минуты и 22 секунды
Цитата(Proger10 @  10.7.2009,  15:41 Найти цитируемый пост)
Ну да всё равно. К чему мы передаём в функцию initGlutWindow параметр экземпляра класса? Это точно верная форма вызова?? Очень подозрительная форма вызова: "OpenGLClass::initGlutWindow" smile 

Это верная форма вызова. Ругается у тебя по другой причине, я так понял что ты ее уже исправил.

PM MAIL ICQ Jabber   Вверх
Proger10
Дата 10.7.2009, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



AlexT84, попытался сделать: http://paste.org.ru/?3e2azl
и вот:
Код
$ g++ main.cpp -lglut -lboost_thread-mt `pkg-config opencv --cflags --libs`
main.cpp:82: error: expected unqualified-id before '{' token
main.cpp:98: error: 'void OpenGLClass::operator()()' cannot be overloaded
main.cpp:74: error: with 'void OpenGLClass::operator()()'
main.cpp: In function 'int main(int, char**)':
main.cpp:136: error: 'c' is not a class or namespace
make: *** [all] Error 1

нифига не работает :(
PM MAIL   Вверх
Proger10
Дата 10.7.2009, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



---

Это сообщение отредактировал(а) Proger10 - 10.7.2009, 16:28
PM MAIL   Вверх
vinick
Дата 10.7.2009, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

 boost::thread myThread1( boost::bind( &c::drawScene() ) );

замени на 
Код

boost::thread myThread1( с );

PM MAIL ICQ Jabber   Вверх
AlexT84
Дата 10.7.2009, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Быть может, это потому, что у тебя operator () два раза определён. На 74 и 98 строке. Да, кстати, если хочеш работать с потоками, вынеси  OpenGLClass c; из main, либо сделай его динамическим.
PM MAIL   Вверх
Proger10
Дата 10.7.2009, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



http://paste.org.ru/?frnwfq
Код
$ g++ main.cpp -lglut -lboost_thread-mt `pkg-config opencv --cflags --libs`
main.cpp:128: error: stray '\361' in program
main.cpp:22: error: 'OpenGLClass' does not name a type
main.cpp:78: error: expected unqualified-id before '{' token
main.cpp: In function 'int main(int, char**)':
main.cpp:137: error: request for member 'join' in 'myThread1', which is of non-class type 'boost::thread ()()'
make: *** [all] Error 1

никак не угадаю где ошибка..
PM MAIL   Вверх
DRUID3
Дата 10.7.2009, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

Походу прямая мне дорога к Boost'у.

Тупо для инфы - еще можно и через Qt4...


--------------------
Every time if you use Linux, you are joined to the communism...
практика - критерий истины ... отделенной от нас пропастью субъективного восприятия...
PM MAIL WWW Skype   Вверх
AlexT84
Дата 10.7.2009, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



22 строка -- объявление объекта до описания класса
78 строка -- OpenGLClass {   конструктор объявляется OpenGLClass() {
остальные скорее всего производные.
PM MAIL   Вверх
MTWizard
Дата 10.7.2009, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



У тебя чистой воды гонка: ты запускаешь одновременно инициализацию openCV и openGL в разніх потоках. Если инициализация openCV отработает раньше, то она вызовет функции openGL в тот момент, когда openGL ещё недоинициализирована. Так что окончания инициализации надо дождаться и только потом запускать рисование
PM MAIL   Вверх
Proger10
Дата 10.7.2009, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Что-то не получается.. а что за ошибка на 128?
http://paste.org.ru/?f2udwb
Код
$ g++ main.cpp -lglut -lboost_thread-mt `pkg-config opencv --cflags --libs`
main.cpp:128: error: stray '\361' in program
main.cpp: In constructor 'OpenGLClass::OpenGLClass()':
main.cpp:84: error: argument of type 'void (OpenGLClass::)()' does not match 'void (*)()'
main.cpp:85: error: argument of type 'void (OpenGLClass::)(unsigned char, int, int)' does not match 'void (*)(unsigned char, int, int)'
main.cpp:86: error: argument of type 'void (OpenGLClass::)(int, int)' does not match 'void (*)(int, int)'
main.cpp: In function 'int main(int, char**)':
main.cpp:137: error: request for member 'join' in 'myThread1', which is of non-class type 'boost::thread ()()'
make: *** [all] Error 1

PM MAIL   Вверх
AlexT84
Дата 10.7.2009, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



На 128й строке у тебя скорее всего закрался посторонний символ, когда ты копипастил код с форума. Попробуй удалить её и перепечатать руками.
На 84, 85, 86 передаёш методы класса как статические функции.
на 137 должно быть производная от 128й.


В общем доведи свой код, до состояния, когда он скомпилится без потоков. Потом и можно будет разбиратся.

Это сообщение отредактировал(а) AlexT84 - 10.7.2009, 17:37
PM MAIL   Вверх
andrew_121
Дата 10.7.2009, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

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



Цитата(DRUID3 @  10.7.2009,  16:58 Найти цитируемый пост)
Тупо для инфы - еще можно и через Qt4... 

Используй libpthread. Она на многие ОС портирована.
OpenGLClass создай динамически.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Proger10
Дата 10.7.2009, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(MTWizard @ 10.7.2009,  17:15)
У тебя чистой воды гонка: ты запускаешь одновременно инициализацию openCV и openGL в разніх потоках. Если инициализация openCV отработает раньше, то она вызовет функции openGL в тот момент, когда openGL ещё недоинициализирована. Так что окончания инициализации надо дождаться и только потом запускать рисование

Нее.. погоди, вот с этим я не согласен. Я говорил, что у меня на OpenGL уже отрисовывается(!) первый раз.. А после клика на кнопку там вызывается второй раз drawScene - и вот тогда вылетает.
Почему же мы делаем вывод, что оно не инициализируется, если оно даже отрисовывает первый раз линию успешно? А вот второй раз после cvWaitKey улетает..
PM MAIL   Вверх
Страницы: (4) Все 1 [2] 3 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0551 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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