Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Программирование под Unix/Linux > Функция - член класса |
Автор: Rickert 2.3.2007, 11:58 |
Есть функция - член класса - как мне её запустить в поток, без привлечения передачи параметров в стат. функцию и без использования глобальных переменных? |
Автор: Любитель 2.3.2007, 13:12 |
Зависит от используемой потоковой либы. Если сие POSIX-функции, то никак. Если, скажем Boost.Thread ![]() |
Автор: Orthenner 2.3.2007, 14:29 |
для pthreads мне пришлось объявлять функцию-член класса как static. Для С++ лучше юзать boost или тот же QT |
Автор: MAKCim 2.3.2007, 16:30 | ||
нет ничего невозможного ![]()
|
Автор: Любитель 4.3.2007, 00:15 |
MAKCim, уж слишком непортируемый код получаем (да и читабельность всё таки страдает). POSIX поддерживают многие компиляторы (даже в полном объёме). А вот подобные игрушки - единицы ![]() |
Автор: Любитель 4.3.2007, 12:58 |
![]() Ну почему? Скажем, заставить господина MAKCim писать на шарпе (по крайней мере официал релиз, так сказать) ![]() |
Автор: MAKCim 4.3.2007, 13:14 | ||
это вполне возможно ![]() я ничего, кстати, против .NET и C#-а в частности не имею. Думаю для решения многих не критичных к скорости прикладных задач в Window$ это самый лучший выбор так что если придется их писАть (вот тут уж не дай бог ![]() ![]() |
Автор: Любитель 4.3.2007, 13:50 |
Я взял шарп именно потому, что его главная область: Учитывая делаем выводы... То есть виновать не шарп как таковой, а его главная область применения. Именно поэтому я подчеркнул, что речь про официал релиз. Всякие Моно (а также до сих пор непонимаемые мною дотгну) в рассмотрение не входят. ![]() |
Автор: Rickert 7.3.2007, 12:54 |
Что значит POSIX-функция? |
Автор: MAKCim 7.3.2007, 20:29 |
которая находится в библиотеке pthread |
Автор: Ken 31.3.2007, 23: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 (); |
Автор: MAKCim 1.4.2007, 08:51 |
Ken, имхо, имелось в виду не это |
Автор: Ken 1.4.2007, 10:38 | ||
Возможно, но используя класс Thread он уже не будеть думать о статической функции и глобальных переменных для этой задачи, все уже скрыто внутри Thread. А вообще, без использовании статической или глобальной функции невозможно, ибо posixthreads требует этого. |
Автор: MAKCim 1.4.2007, 11:40 | ||
все возможно ![]() |