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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функция - член класса, вызов её в потоке 
V
    Опции темы
Rickert
Дата 2.3.2007, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: -2
Всего: 52



Есть функция - член класса - как мне её запустить в поток, без привлечения передачи параметров в стат. функцию и без использования глобальных переменных?


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Любитель
Дата 2.3.2007, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Зависит от используемой потоковой либы. Если сие POSIX-функции, то никак. Если, скажем Boost.Thread  smile , то Boost.Bind, скажем.


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


Любитель
*


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

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



для pthreads мне пришлось объявлять функцию-член класса как static. Для С++ лучше юзать boost или тот же QT
PM MAIL ICQ   Вверх
MAKCim
Дата 2.3.2007, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата(Любитель @  2.3.2007,  13:12 Найти цитируемый пост)
Если сие POSIX-функции, то никак

нет ничего невозможного  smile 
Код

class A {
public:
    void F() { std :: cout << "Hello, World!" << std :: endl; }
};

int main() {
    pthread_t thread;
    A a;
    void (A :: *class_ptr)() = &A :: F;
    void* (*ptr)(void*);
    __asm__("movl    %1, %0" : "=r" (ptr) : "0" (class_ptr)); // потому как reinterpret_cast<> бессилен
    pthread_create(&thread, NULL, ptr, &a);
    pthread_join(thread, NULL);
}




Это сообщение отредактировал(а) MAKCim - 2.3.2007, 16:31


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Любитель
Дата 4.3.2007, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



MAKCim, уж слишком непортируемый код получаем (да и читабельность всё таки страдает). POSIX поддерживают многие компиляторы (даже в полном объёме). А вот подобные игрушки - единицы  smile 


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


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата(Любитель @  4.3.2007,  00:15 Найти цитируемый пост)
MAKCim, уж слишком непортируемый код получаем (да и читабельность всё таки страдает). POSIX поддерживают многие компиляторы (даже в полном объёме). А вот подобные игрушки - единицы

с этим никто и не спорит
просто нет ничего невозможного (при желании)


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Любитель
Дата 4.3.2007, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



 smile 
Цитата(MAKCim @  4.3.2007,  10:51 Найти цитируемый пост)
просто нет ничего невозможного (при желании)

Ну почему? Скажем, заставить господина MAKCim писать на шарпе (по крайней мере официал релиз, так сказать) smile


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


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата(Любитель @  4.3.2007,  12:58 Найти цитируемый пост)
Ну почему? Скажем, заставить господина MAKCim писать на шарпе (по крайней мере официал релиз, так сказать) 

это вполне возможно  smile 
я ничего, кстати, против .NET и C#-а в частности не имею. Думаю для решения многих не критичных к скорости прикладных задач в Window$ это самый лучший выбор
так что если придется их писАть (вот тут уж не дай бог  smile (но не из-за C#)), мой выбор будет С#  smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Любитель
Дата 4.3.2007, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Я взял шарп именно потому, что его главная область:
Цитата(MAKCim @  4.3.2007,  13:14 Найти цитируемый пост)
не критичные к скорости прикладные задачи в Window$


Учитывая
Цитата(MAKCim @  4.3.2007,  13:14 Найти цитируемый пост)
вот тут уж не дай бог

делаем выводы...

То есть виновать не шарп как таковой, а его главная область применения. Именно поэтому я подчеркнул, что речь про официал релиз. Всякие Моно (а также до сих пор непонимаемые мною дотгну) в рассмотрение не входят. smile



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


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: -2
Всего: 52



Что значит POSIX-функция?


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
MAKCim
Дата 7.3.2007, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата(Rickert @  7.3.2007,  12:54 Найти цитируемый пост)
Что значит POSIX-функция? 

которая находится в библиотеке pthread


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Ken
Дата 31.3.2007, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Rickert @ 2.3.2007,  11:58)
Есть функция - член класса - как мне её запустить в поток, без привлечения передачи параметров в стат. функцию и без использования глобальных переменных?

Решается легко, примерно таким образом:
Создаешь простой базовый Thread класс.
//--------------------------------------
class Thread
{
    public:
        void start ();

    protected:
        virtual void run () = 0;

    private:
        pthread_t _thread;

        static void* doExecute (void* threadObject);
};
//--------------------------------------
void Thread::void start ()
{
    pthread_create (&_thread, NULL, doExecute, this);
    pthread_detach (pthread_self ());
}

static void* Thread::doExecute (void* threadObject)
{
   Thread* thread = (Thread*) threadObject;
    thread->run ();
    return NULL;
}
//--------------------------------------
Делаешь Thread родителем своего класса который содержит нужный тебе метод
и реализуешь метод run ().

class MyThreadedClass: public Thread
{
    protected:
        void run ()
        {
            // тут вызываешь свой метод
        }
}
//--------------------------------------
Создаешь объект и запускаешь поток:

MyThreadedClass* thead = new MyThreadedClass ();
...
thread->start ();

PM MAIL   Вверх
MAKCim
Дата 1.4.2007, 08:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Ken
имхо, имелось в виду не это


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Ken
Дата 1.4.2007, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(MAKCim @ 1.4.2007,  08:51)
Ken
имхо, имелось в виду не это

Возможно, но используя класс Thread он уже не будеть думать о статической функции и глобальных переменных для этой задачи, все уже скрыто внутри Thread.

А вообще, без использовании статической или глобальной функции невозможно, ибо posixthreads требует этого.
PM MAIL   Вверх
MAKCim
Дата 1.4.2007, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата(Ken @  1.4.2007,  10:38 Найти цитируемый пост)
А вообще, без использовании статической или глобальной функции невозможно, ибо posixthreads требует этого. 

все возможно  smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

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


 




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


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

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