Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
sera0
0 / 0 / 0
Регистрация: 04.04.2010
Сообщений: 91
#1

Можно ли запустить отдельным потоком функцию-член класса? - C++

19.09.2010, 10:02. Просмотров 988. Ответов 8
Метки нет (Все метки)

sbjct
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.09.2010, 10:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Можно ли запустить отдельным потоком функцию-член класса? (C++):

Указатель на функцию - член класса. - C++
делаю так: class c1 { void foo(); } class c2 { void (*fp)();

Указатель на функцию-член класса - C++
Нужно передать указатель на функцию класса A изнутри самого класса А в функцию, в качестве аргумента классу B. #include <Windows.h>...

Передача указателя на функцию-член класса - C++
Необходимо передать фунцию-член класса как аргумент в функцию другого класса. Код: Файл main.cpp #include "head.hpp" int...

Добавить в класс Student функцию-член класса - C++
Добавить в класс Student функцию-член класса, определяющую, получает ли студент стипендию, и в головной программе организовать подсчёт...

Можно ли инициализировать static член класса функцией? - C++
Сабж. Конкретно - в классе есть static член типа SYSTEM_INFO (Windows.h), а мне нужно его инициализировать с помощью функции GetSystemInfo.

std::bind и указатель на статическую функцию член класса - C++
Биндинг простых функций класса-это понятно, а вот как быть, если функция статическая?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Kovalsky2
0 / 0 / 0
Регистрация: 05.08.2009
Сообщений: 96
19.09.2010, 16:01 #2
Можно.Пояснить.
0
sera0
0 / 0 / 0
Регистрация: 04.04.2010
Сообщений: 91
19.09.2010, 16:30  [ТС] #3
Привожу пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
class CA {
public:
 int i;
 void calculation() { /*некоторые длительные вычисления*/ }
};
 
int main() {
 ...
 CA ca;
 _beginthread(ca.calculation(), 1000, NULL); // не позволяет!!!
 ...
}
0
Kovalsky2
0 / 0 / 0
Регистрация: 05.08.2009
Сообщений: 96
19.09.2010, 17:06 #4
Делаем следующее:
C++
1
2
3
4
5
class CA {
public:
 int i;
 static void calculation(void* param) { /*некоторые длительные вычисления*/ }
};
Должно получиться.
0
sera0
0 / 0 / 0
Регистрация: 04.04.2010
Сообщений: 91
19.09.2010, 17:13  [ТС] #5
дело в том, что у меня внутри этой функции используются члены-переменные класса (для приведенного примера это, предположим, значение i), то есть я не могу ее объявлять static
0
Kovalsky2
0 / 0 / 0
Регистрация: 05.08.2009
Сообщений: 96
19.09.2010, 17:27 #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class CA {
public:
 int i;
 static void calculation(void *param) 
{ /*некоторые длительные вычисления*/ 
  CA* lCa=(CA*)param;
  lCa->i=666;
}
 
};
 
int main() {
 ...
 CA ca;
 _beginthread(ca.calculation(), 1000,(void*)&ca);
 ...
}
0
sera0
0 / 0 / 0
Регистрация: 04.04.2010
Сообщений: 91
19.09.2010, 17:39  [ТС] #7
вот это уже и у меня получалось
Только при таком подходе получается проблема. Предположим, фукнция static void calculation(void *param) в конце своих 'длительных' вычислений выводит результат:
... printf('%f', result)

так вот! А основная программа
Код
main() {}
уже закончилась! и эти результаты никто и никогда не видит :/
То есть как мне заставить прогу жить, пока живой этот поток?
0
Kovalsky2
0 / 0 / 0
Регистрация: 05.08.2009
Сообщений: 96
19.09.2010, 18:12 #8
А если сделать таk:
- добавляем в class СА переменную bool Exit
- привходе в calculation делаем её false
- при выжоде из calculation делаем true
- в main() добавим главный цикл и вмём проверяем CA.Exit
или while (!CA.Exit){Sleep(1000);}
0
sera0
0 / 0 / 0
Регистрация: 04.04.2010
Сообщений: 91
19.09.2010, 19:27  [ТС] #9
это действительно напрашивается.

Большое спасибо за помощь!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.09.2010, 19:27
Привет! Вот еще темы с ответами:

Указатель на функцию-член одного класса в другом классе - C++ - C++
Добрый вечер! Может кто-то может помочь с проблемой. class Cook { public: void _cook_dish(Dish cook_dish_id) { ... ...

Как вызвать функцию-член правильно для класса Person - C++
Задача простая, ввести фамилию и имя и вывести их. Подскажите, как правильно написать функцию вывода print(). Если один параметр...

Как создать указатель на функцию-член класса и вызвать его? - C++
Подскажите как правильно сделать, а в дальнейшем вызвать указатель на функцию член класса: #include "stdafx.h" #include <iostream> ...

Можно ли переопределить функцию-член в унаследованном классе, не объявляя её виртуальной в родительском? - C++
Предположим, есть абстрактный класс Worker. class Worker { protected: char *myName; int value; private: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.09.2010, 19:27
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru