Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> МногоПоточность, ... 
:(
    Опции темы
[ss]3L33T@
  Дата 26.11.2003, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 123
Регистрация: 14.10.2003
Где: Казармы

Репутация: -1
Всего: 1



Меня интересует след. вещь - как организовать одновременное выполнение действий?
Иногда это называют - моногопоточность. Я к тому что, ведь программа выполняется
последовательно? Дык вот например есть код программы:
"

#include <iostream.h>
void main()
{
for (int i=0;i<10;i++)
cout<<i<<endl;
for (int j=10;j>0;j--)
cout<<j<<endl;
}

"
Программа сначала проведёт первый цикл, выдаст все значения; затем пройдёт второй цикл
и будут выданы значения второго цикла.
А как запустить их параллельно?

И если такое возможно, то в таком случае как быть с процедурами и функциями?
Т.е. Например есть функция:
"

void cout_me(int num)
{ for (int i=0;i<10;i++)
cout<<num<<endl;
}

"
Но если в одно время из программы будет вызвана эта функция, то компьютер просто
запутается - Первый вызов начнёт проходит по циклу, а тут вылазит одновременно второй и
тоже начинает проходить по циклу с начала(с нуля) => у первого прохода собьются
значения i в цикле. Что делать в таком случае?

И вот последнее, что касается этой темы: по сути ведь, можно написать
несколько *.exe'шников. Тогда будет несколько программ, которые будут выполнятся
одновременно, но как тогда организовать доступ к общим функциям, которые будут
описаны в одном из этих *.exe'шников(в одной из этих программ). И если всё это реально,
то почему это не используется в игровой индустрии или я ошибаюсь?


P.S.
Очень большая просьба пообсуждать это, а не перенаправлять меня на www.gamedev.ru.
2 Модераторы: Прошу не удалять эту тему. Я понимаю, что задал здесь 3 вопроса, но
ведь по сути они все едины. Я просто уточнил.
--------------------
Понастоящему добрый человек всегда простит и забудет вам ваше зло, но он никогда не простит и не забудет вашего добра[ss]3L33T@
PM MAIL WWW ICQ   Вверх
knave
Дата 26.11.2003, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 6.3.2003
Где: Санкт-Питербург ( Россия)

Репутация: 1
Всего: 5



надо создать две нити в кадлой из которых будет по циклу
см _beginthread() в хэлпе. Эта функция сосзает нить - потомк, на основк указанной ей функции которая имаеет определенный загловок.

Вызывать эту функцию можно и руки но делать этого нестоит, она не для этого преднозначена.


--------------------
С наилучшими пожеланиями !!!
PM MAIL ICQ   Вверх
Albinos
Дата 26.11.2003, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 11.10.2003

Репутация: нет
Всего: 3



Если VC 6.0, то есть функции AfxBeginThread, и класс - оболочка - по-моему CThread. В параметрах первой функции указываешь функцию нового потока, от второго - необходимо наследовать и переопределять функцию потока (скорее всего Run или что-то типа того), хотя возможно я путаю с дельфей.

В твоем примере возникнет вопрос синхронизации двух потоков. Если два потока начнут писать в cout одновременно, то на выходе получится беледерда.

Необходимо, чтобы второй поток не писал в cout, если в данный момент времени туда пишет первый. И наоборот. Для синхронизации используются средства синхронизации - События (Event), мютексы (Mutex) и еще что-то есть.

Блин, совсем все забыл... sad.gif
PM MAIL   Вверх
NiJazz
Дата 26.11.2003, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 1
Всего: 23



Albinos, ещё помнятся семафоры - мьютексы со счётчиками обращений.

[ss]3L33T@, а какая в этом практическая надобность? Не терпится? Или так как жизнь коротка, нужно сэкономить пару-другую тысячных долей наносекунд? smile.gif

Была как-то надобность создать поток для описанной функции, но почему-то VC++ кричал, что не знает _beginthread. Тут я воспользовался BeginThread, но не могу всё же понять, почему не работало первое... Кстати, для создания потоков и работы с памятью в Win32 лучше юзать её API. Они более гибкие...
PM MAIL   Вверх
NiJazz
Дата 26.11.2003, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 1
Всего: 23



Ой, соврал, перепутал... CreateThread, конечно!!! smile.gif
PM MAIL   Вверх
DENNN
Дата 27.11.2003, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



Цитата
Если VC 6.0, то есть функции AfxBeginThread, и класс - оболочка - по-моему CThread

Если быть точными, то это есть в MFC - там рекомендуется запускать потоки только так. В МСДН к 6 студии был пример ее использования.
PM ICQ   Вверх
Ars
Дата 27.11.2003, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 28.8.2003
Где: Московская обл.

Репутация: 2
Всего: 2



Цитата
И вот последнее, что касается этой темы: по сути ведь, можно написать
несколько *.exe'шников. Тогда будет несколько программ, которые будут выполнятся
одновременно, но как тогда организовать доступ к общим функциям, которые будут
описаны в одном из этих *.exe'шников(в одной из этих программ). И если всё это реально,
то почему это не используется в игровой индустрии или я ошибаюсь?

Многопоточность используется не для общего доступа к функциям (для этого есть другие технологии), а для общего доступа к данным. Например, один поток читает из порта данные. Ему надо это сделать как можно быстрее, чтобы не потерять их. А второй поток занимается обработкой этих данных, а она значительно медленнее и все вместе в одном потоке не получилось бы...


--------------------
Есть многое на свете, друг Горацио,
С чем очень долго можно прое..!
PM MAIL   Вверх
[ss]3L33T@
Дата 27.11.2003, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 123
Регистрация: 14.10.2003
Где: Казармы

Репутация: -1
Всего: 1



ДА НЕТ ЖЕ!
Я не о том, как написать самому такую хрень. Стандартными фукциями любой придурок воспользоваться может.
2 Ars:
Ты не понял о чём я.
2 NiJazzz:
Сегодня две наносекунды, завтра пара, потом ещё десяток - так глядишь и лет двадцать накропаю smile.gif
2 Albinos:
Я же привёл пример, я не утверждаю, что функции одновреммено выводят что-то, одной и той же фукцией. Например: одна - устанавливает переменную в опред. значение, вторая - берёт это значение и, например, выозводит её в квадрат, выводя это на экран.
--------------------
Понастоящему добрый человек всегда простит и забудет вам ваше зло, но он никогда не простит и не забудет вашего добра[ss]3L33T@
PM MAIL WWW ICQ   Вверх
DENNN
Дата 28.11.2003, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



Цитата
пример: одна - устанавливает переменную в опред. значение, вторая - берёт это значение и, например, выозводит её в квадрат, выводя это на экран.

И все равно - это объекты синхронизации. Неужели настолько лень в инете почитать ?
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0538 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.