Russian Qt Forum
Май 06, 2024, 22:20 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вызов функции другого потока.  (Прочитано 6044 раз)
JamS007
Гость
« : Август 20, 2010, 17:04 »

Доброго времени суток,
подскажите пожалуйста, если вызывать функцию из другого потока, то какой поток будет ее обрабатывать, тот, что вызывает, или поток-владелец функции?

Пробовал экспериментировать сам: создал поток, в run() увел его в вечный цикл, чтоб у него не было возможности отвечать на вызовы. После чего в главном потоке вызвал его функцию, как ни странно ответ пришел. В дебаггере ставил точку останова в функции дочернего потока, управление приходит, и gdb показывает, что эту функцию обслуживает первый, то есть основной поток. Но слава gdb мне не внушает доверия. Что скажете?

И заодно уже второй вопрос задам. Если писать в соккет, который принадлежит другому потоку, ничего страшного не будет? Улыбающийся Я уже так делал, вроде ничего, кроме того, что соккет на это не реагирует, до того, как поток-владелец не получит процессорное время. Но я думаю что это из-за каких то специфичных ивентов соккета, и пока цикл обработки сообщений не работает, то и данные не пишутся. Если не прав - поправьте.
« Последнее редактирование: Август 20, 2010, 17:08 от JamS007 » Записан
SASA
Гость
« Ответ #1 : Август 20, 2010, 18:09 »

У потоков нет данных, функций и т.д. Поток - это нечто, что исполняет команды.
Функция - это набор комманд. Любой поток может исполнить любую функцию.
Например, есть функция "сходить за хлебом". Набор команд. Его могут выполнять люди. Я, Вы, Петя ... Более того, мы можем его выполнять одновременно. Проблема возникает тогда, когда мы идём в один магазин, за одной и той же буханкой. У кого будет эта буханка в конце концов - не известно.

З.Ы. Я хочу сказать: "Почитайте что-нибудь про потоки." Подмигивающий
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.044 секунд. Запросов: 20.