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

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

Восстановить пароль Регистрация
 
sera0
0 / 0 / 0
Регистрация: 04.04.2010
Сообщений: 91
19.09.2010, 10:02     Можно ли запустить отдельным потоком функцию-член класса? #1
sbjct
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.09.2010, 10:02     Можно ли запустить отдельным потоком функцию-член класса?
Посмотрите здесь:

Указатель на функцию - член класса. C++
C++ Член-ссылка на другой член класса
Добавить в класс Student функцию-член класса C++
Передача указателя на функцию-член класса C++
C++ std::bind и указатель на статическую функцию член класса
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kovalsky2
0 / 0 / 0
Регистрация: 05.08.2009
Сообщений: 96
19.09.2010, 16:01     Можно ли запустить отдельным потоком функцию-член класса? #2
Можно.Пояснить.
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); // не позволяет!!!
 ...
}
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) { /*некоторые длительные вычисления*/ }
};
Должно получиться.
sera0
0 / 0 / 0
Регистрация: 04.04.2010
Сообщений: 91
19.09.2010, 17:13  [ТС]     Можно ли запустить отдельным потоком функцию-член класса? #5
дело в том, что у меня внутри этой функции используются члены-переменные класса (для приведенного примера это, предположим, значение i), то есть я не могу ее объявлять static
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);
 ...
}
sera0
0 / 0 / 0
Регистрация: 04.04.2010
Сообщений: 91
19.09.2010, 17:39  [ТС]     Можно ли запустить отдельным потоком функцию-член класса? #7
вот это уже и у меня получалось
Только при таком подходе получается проблема. Предположим, фукнция static void calculation(void *param) в конце своих 'длительных' вычислений выводит результат:
... printf('%f', result)

так вот! А основная программа
Код
main() {}
уже закончилась! и эти результаты никто и никогда не видит :/
То есть как мне заставить прогу жить, пока живой этот поток?
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);}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.09.2010, 19:27     Можно ли запустить отдельным потоком функцию-член класса?
Еще ссылки по теме:

Можно ли инициализировать static член класса функцией? C++
Как создать указатель на функцию-член класса и вызвать его? C++
Указатель на функцию-член класса C++

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

Или воспользуйтесь поиском по форуму:
sera0
0 / 0 / 0
Регистрация: 04.04.2010
Сообщений: 91
19.09.2010, 19:27  [ТС]     Можно ли запустить отдельным потоком функцию-член класса? #9
это действительно напрашивается.

Большое спасибо за помощь!
Yandex
Объявления
19.09.2010, 19:27     Можно ли запустить отдельным потоком функцию-член класса?
Ответ Создать тему
Опции темы

Текущее время: 07:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru