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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
HardMorg
2 / 25 / 3
Регистрация: 29.08.2010
Сообщений: 204
10.03.2014, 21:28     Вызывть метод одного потока из другого потока #1
Здравствуйте, подскажите пожалуйста, как можно реализовать такую штуку :

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

Вообщем можно ли такое?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
12.03.2014, 10:56     Вызывть метод одного потока из другого потока #21
Цитата Сообщение от HardMorg Посмотреть сообщение
если бы можно было запускать обработчики операций ввода-вывода в потоке GUI то синхронизация не нужна
Запускайте. Кто ж Вам не дает. Только когда GUI будет подвешиваться, пеняйте на себя.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
HardMorg
2 / 25 / 3
Регистрация: 29.08.2010
Сообщений: 204
12.03.2014, 15:55  [ТС]     Вызывть метод одного потока из другого потока #22
Tulosba, видно вы немного непоняли, не сами операции ввода-вывода и сеть, а только обработчики которые вызываются после выполнения этих операций
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
12.03.2014, 16:03     Вызывть метод одного потока из другого потока #23
Цитата Сообщение от HardMorg Посмотреть сообщение
а только обработчики которые вызываются после выполнения этих операций
Дело тут в первую очередь в длительности операций, а не в том, как их назвать.
HardMorg
2 / 25 / 3
Регистрация: 29.08.2010
Сообщений: 204
12.03.2014, 23:52  [ТС]     Вызывть метод одного потока из другого потока #24
Tulosba, вы правы дело в длительности, саму операцию обрабатывать в одном потоке, а обработчик который нужно вызвать в первом потоке( сам обработчик легкий)
но мне так и не подсказали как так можно сделать( как я выше спрашивал)
сам я тоже в принципе ничего не не нашел, в бусте видел boost:coroutine, В принципе почти то что я искал, но он не поддерживает прижки между разными потоками
так что такие вот дела(
Jupiter
13.03.2014, 00:36
  #25

Не по теме:

тем временем в другой галактике C#

C#
1
2
3
4
5
6
7
//UI thread
async void SomeHandler()
{
    var content = await GetContentAsync();
 
    //work with content after async task finished
}
boost::coroutine как и самому с++ ещё грести и грести до такого, и не факт что выгребет

Pure
 Аватар для Pure
228 / 49 / 2
Регистрация: 13.03.2012
Сообщений: 453
Записей в блоге: 7
14.03.2014, 15:40     Вызывть метод одного потока из другого потока #26
ересь чес слово.
1.где нужен результат обработки? например отобразить циферки в форме или заполнить форму данными из файла пришедшими по сети?
2. делаем функцию, которая будет обновлять формочку, соответственно у функции должен быть доступ к формочке.
3. При нажатии кнопки Апдейт - создаем поток и передаем в него указатель на эту функцию.
4. в конце потока, после получения данных из сети - дергаем этот указатель и формочка или оконце наполняется данными. Выходим из потока.

ВСЕ потоки в рамках ОДНОГО процесса имеют общее адресное пространство и общий доступ к ресурсам. Затем и придумали синхронизацию. Так в чем сложность то? Наплодить кучу потоков, передавать им указатели на обработчики и дергать эти обработчики перед выходом из потока?
Функция, ее определение - это просто кусочек памяти и обращаться к ней может любой поток.

Чтобы лучше понимать как работают монстры qt и прочие бусты, попробуй вначале просто нативно на API это все сделать. И все поймешь. Окошко, сокет, кнопка, функция обработчик текста окошка.
По нажатию кнопки - новый поток, соединение по сети запись чтение, вызов обработчика окошка, выход.

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

Видимо ты не хош сам вникать. Таки скидывай весь код. Глядишь тебе кто то враз все поправит. Но все же я настаиваю на том, чтобы ты сам разобрался
HardMorg
2 / 25 / 3
Регистрация: 29.08.2010
Сообщений: 204
14.03.2014, 16:18  [ТС]     Вызывть метод одного потока из другого потока #27
Pure, простите, но видать вы просто не поняли что я хотел, то что вы написали это все ясно и понятно, суть не этом, я просто думал о другом подходе, про какой код вы говорите тоже не ясно, ничего мне кидать не нужно, в начале темы я другое писал, посмотритет что постил человек выше, вот реально на что-то похоже, но это шарп
Pure
 Аватар для Pure
228 / 49 / 2
Регистрация: 13.03.2012
Сообщений: 453
Записей в блоге: 7
14.03.2014, 23:09     Вызывть метод одного потока из другого потока #28
Цитата Сообщение от HardMorg Посмотреть сообщение
вы просто не поняли что я хотел
а сам четко понимаешь что хочешь? То, что юпитер написал в паре строк шарповского кода - лишь обертка над нативным апи. то бишь все даже еще на С работает, чего уж там. А на С++ подавно.
Цитата Сообщение от Jupiter Посмотреть сообщение
boost::coroutine как и самому с++ ещё грести и грести до такого, и не факт что выгребет
нативненько все отлично работает.
Ладно, удач и сбычи мечт всем
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2014, 23:48     Вызывть метод одного потока из другого потока
Еще ссылки по теме:

Создание потока C++
Создать разное количество потоков с возможностью ожидания события из одного потока в другом C++
Потоки, static. Доступ к полю класса из другого потока C++

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

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

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