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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
HardMorg
3 / 26 / 3
Регистрация: 29.08.2010
Сообщений: 204
#1

Вызывть метод одного потока из другого потока - C++

10.03.2014, 21:28. Просмотров 1797. Ответов 28
Метки нет (Все метки)

Здравствуйте, подскажите пожалуйста, как можно реализовать такую штуку :

есть один поток(1), который вызывает метод у обьекта, этот метод создает второй поток(2) и в новом потоке(2) что-то делает, потом по окончанию своей работы(2 - поток), нужно вызвать метод который выполнился б уже в первом(1) потоке, тоесть второй поток впихивает метод в первый.

Вообщем можно ли такое?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.03.2014, 21:28     Вызывть метод одного потока из другого потока
Посмотрите здесь:
Запуск потока из другого приложения C++
C++ Как прочитать данные из потока вывода другого процесса
Потоки, static. Доступ к полю класса из другого потока C++
Создать разное количество потоков с возможностью ожидания события из одного потока в другом C++
Есть два потока и глобальный массив, могут ли потоки перепутать элементы глобального массива или другого контейнера? C++
C++ Написать программу, содержащую два потока, каждый из которых управляет движением одного из двух шаров
Создание потока из потока. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.03.2014, 21:41     Вызывть метод одного потока из другого потока #2
возможно
HardMorg
3 / 26 / 3
Регистрация: 29.08.2010
Сообщений: 204
10.03.2014, 21:53  [ТС]     Вызывть метод одного потока из другого потока #3
Jupiter, как? желательно без всяких блокировок
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.03.2014, 22:12     Вызывть метод одного потока из другого потока #4
Цитата Сообщение от HardMorg Посмотреть сообщение
как?
зависит от того что используется
HardMorg
3 / 26 / 3
Регистрация: 29.08.2010
Сообщений: 204
10.03.2014, 22:14  [ТС]     Вызывть метод одного потока из другого потока #5
Jupiter, в каком смысле?
вы про буст?
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
10.03.2014, 22:39     Вызывть метод одного потока из другого потока #6
Цитата Сообщение от HardMorg Посмотреть сообщение
тоесть второй поток впихивает метод в первый.
наитупейший случай: второй поток устанавливает некий флаг, в первом потоке он анализируется и выполняется тот или иной метод.
HardMorg
3 / 26 / 3
Регистрация: 29.08.2010
Сообщений: 204
11.03.2014, 00:08  [ТС]     Вызывть метод одного потока из другого потока #7
Tulosba, нет, это не подходит, так как первый поток должен знать про второй, а мне нужно что бы для первого потока все было прозрачно, он не должен знать про второй

Добавлено через 27 минут
Jupiter, так что, подскажите?
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.03.2014, 00:36     Вызывть метод одного потока из другого потока #8
Цитата Сообщение от HardMorg Посмотреть сообщение
в каком смысле?
в прямом, я даю абстрактный ответ на ваш абстрактный вопрос

Добавлено через 1 минуту
Цитата Сообщение от HardMorg Посмотреть сообщение
так что, подскажите?
смотрите в сторону событийно-ориентированного программирования
HardMorg
3 / 26 / 3
Регистрация: 29.08.2010
Сообщений: 204
11.03.2014, 00:49  [ТС]     Вызывть метод одного потока из другого потока #9
Jupiter, а что собственно абстрактного? есть обработчик его нужно вызвать, только вызвать не в потоке который выполнял операцию а в том потоке который зарегистрировал этот обработчик
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
11.03.2014, 13:19     Вызывть метод одного потока из другого потока #10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
condition_variable var;
std::mutex mut;
class A
{
void method1()//этот метод будет выполнятся в 1ом потоке
{
//что то делаем
var.notify_one();
}
void method2()
{
std::unique_lock<std::mutex> loker(mut);
var.wait(loker);// вот тут поток 1 зависнет и будет ждать вызова notify_one
//что то делаем
}
}
int main()
{//это первый поток
A object;
std::thread thread1(&A::method1, std:ref(object));//создаем поток 2
object.method2();//вызов метода из 1го потока но он не выполнится пока 1ый поток не закончится
return 0;
}
если я Вас правильно понял

Добавлено через 1 минуту
или еще проще....что то я загнул в условными переменными
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class A
{
void method1()//этот метод будет выполнятся в 1ом потоке
{
//что то делаем
}
void method2()
{
 
//что то делаем
}
}
int main()
{//это первый поток
A object;
std::thread thread1(&A::method1, std:ref(object));//создаем поток 2
thread1.join();//ждем завершение потока 2(выхода из ф-ции method1)
object.method2();
return 0;
}
Добавлено через 3 минуты
11ый стандарт, можно тоже самое с boost, заменить std:: на boost::
Pure
228 / 49 / 2
Регистрация: 13.03.2012
Сообщений: 453
Записей в блоге: 7
11.03.2014, 14:45     Вызывть метод одного потока из другого потока #11
Все верно предыдущий оратор написал ток чутка отклонился от задачи. вызванный метод должен создать поток. Ну и далее по заданию.
Ни на какой буст ничего заменять не советую. Лучше пользоваться стандартом 11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <thread>
 
class A
{
public:
    void method1()
    {
        std::cout<<"Start thread 1\n";
        std::thread t2([](){std::cout<<"Start thread 2 and do some from thread 2\n";});
        t2.join();
 
        std::cout<<"Now return from thread 2, and call method from thread 1\n";
        method2();
    }
 
    void method2()
    {
        std::cout<<"Method2 from thread 1\n";
    }
 
};
 
int main()
{
A object;
 
    std::thread t1(&A::method1, std::ref(object));
    t1.join();
    return 0;
}
HardMorg
3 / 26 / 3
Регистрация: 29.08.2010
Сообщений: 204
11.03.2014, 16:10  [ТС]     Вызывть метод одного потока из другого потока #12
aLarman, это не то, тут первый поток знает о существовании еще потоков...

мне нужно чтобы второй поток запустил функцию в контексте первого
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
11.03.2014, 16:16     Вызывть метод одного потока из другого потока #13
Цитата Сообщение от HardMorg Посмотреть сообщение
окончанию своей работы(2 - поток), нужно вызвать метод который выполнился б уже в первом(1) потоке
Цитата Сообщение от HardMorg Посмотреть сообщение
мне нужно чтобы второй поток запустил функцию в контексте первого
а нужел ли Вам вообще 2ой поток? может это можно сделать в 1ом, раз уж никакой параллельности вычислений не наблюдается
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
11.03.2014, 16:24     Вызывть метод одного потока из другого потока #14
Цитата Сообщение от aLarman Посмотреть сообщение
а нужел ли Вам вообще 2ой поток? может это можно сделать в 1ом, раз уж никакой параллельности вычислений не наблюдается
Вот это я и хотел озвучить, линейный алгоритм, поток ждет второй...

Не по теме:

Извините сложилась впечатление, что задача выглядит так: есть поток "внучок" который бежит всегда вперед потока "бабушка" открывает дверь ему, а затем ждет пока "бабушка" пройдет и снова вперед, хотя и "бабушка" будет ждать "внучка", чтобы тот ей открыл дверь.....

ТС, имеет смысл конкретизировать Вашу задачу, тогда и советы будут более конструктивными и адаптированными для Вас
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.03.2014, 16:25     Вызывть метод одного потока из другого потока
Еще ссылки по теме:
Два потока, две очереди, два потока C++
Очищение потока C++
C++ Функция потока
Создание потока C++
Закрытие потока C++

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

Или воспользуйтесь поиском по форуму:
HardMorg
3 / 26 / 3
Регистрация: 29.08.2010
Сообщений: 204
11.03.2014, 16:25  [ТС]     Вызывть метод одного потока из другого потока #15
Pure, смотрите
вот метод1 создает поток и ждет, а что если тут крутится цикл, который я не могу изменять, но в этом цикле есть евенты на какие-то действия, например на нажатия кнопк, когда нажимаю кнопку хендл этого события вызывается, но оно вызывается в рамках этого потока, значить этот поток зависает, тогда понтяно нужен еще поток, в котором и будет длительно обрабатывать, и вызвать хендл по окончанию, так вот этот хендл нужно вызвать в рамках первого потока
Yandex
Объявления
11.03.2014, 16:25     Вызывть метод одного потока из другого потока
Ответ Создать тему
Опции темы

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