![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| [ss]3L33T@ |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 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@ |
|||
|
||||
| knave |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 320 Регистрация: 6.3.2003 Где: Санкт-Питербург ( Россия) Репутация: 1 Всего: 5 |
надо создать две нити в кадлой из которых будет по циклу
см _beginthread() в хэлпе. Эта функция сосзает нить - потомк, на основк указанной ей функции которая имаеет определенный загловок. Вызывать эту функцию можно и руки но делать этого нестоит, она не для этого преднозначена. -------------------- С наилучшими пожеланиями !!! |
|||
|
||||
| Albinos |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 11.10.2003 Репутация: нет Всего: 3 |
Если VC 6.0, то есть функции AfxBeginThread, и класс - оболочка - по-моему CThread. В параметрах первой функции указываешь функцию нового потока, от второго - необходимо наследовать и переопределять функцию потока (скорее всего Run или что-то типа того), хотя возможно я путаю с дельфей.
В твоем примере возникнет вопрос синхронизации двух потоков. Если два потока начнут писать в cout одновременно, то на выходе получится беледерда. Необходимо, чтобы второй поток не писал в cout, если в данный момент времени туда пишет первый. И наоборот. Для синхронизации используются средства синхронизации - События (Event), мютексы (Mutex) и еще что-то есть. Блин, совсем все забыл... |
|||
|
||||
| NiJazz |
|
|||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: 1 Всего: 23 |
Albinos, ещё помнятся семафоры - мьютексы со счётчиками обращений.
[ss]3L33T@, а какая в этом практическая надобность? Не терпится? Или так как жизнь коротка, нужно сэкономить пару-другую тысячных долей наносекунд? Была как-то надобность создать поток для описанной функции, но почему-то VC++ кричал, что не знает _beginthread. Тут я воспользовался BeginThread, но не могу всё же понять, почему не работало первое... Кстати, для создания потоков и работы с памятью в Win32 лучше юзать её API. Они более гибкие... |
|||
|
||||
| NiJazz |
|
|||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: 1 Всего: 23 |
Ой, соврал, перепутал... CreateThread, конечно!!!
|
|||
|
||||
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Если быть точными, то это есть в MFC - там рекомендуется запускать потоки только так. В МСДН к 6 студии был пример ее использования. |
|||
|
||||
| Ars |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 28.8.2003 Где: Московская обл. Репутация: 2 Всего: 2 |
Многопоточность используется не для общего доступа к функциям (для этого есть другие технологии), а для общего доступа к данным. Например, один поток читает из порта данные. Ему надо это сделать как можно быстрее, чтобы не потерять их. А второй поток занимается обработкой этих данных, а она значительно медленнее и все вместе в одном потоке не получилось бы... -------------------- Есть многое на свете, друг Горацио, С чем очень долго можно прое..! |
|||
|
||||
| [ss]3L33T@ |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 123 Регистрация: 14.10.2003 Где: Казармы Репутация: -1 Всего: 1 |
ДА НЕТ ЖЕ!
Я не о том, как написать самому такую хрень. Стандартными фукциями любой придурок воспользоваться может. 2 Ars: Ты не понял о чём я. 2 NiJazzz: Сегодня две наносекунды, завтра пара, потом ещё десяток - так глядишь и лет двадцать накропаю 2 Albinos: Я же привёл пример, я не утверждаю, что функции одновреммено выводят что-то, одной и той же фукцией. Например: одна - устанавливает переменную в опред. значение, вторая - берёт это значение и, например, выозводит её в квадрат, выводя это на экран. --------------------
Понастоящему добрый человек всегда простит и забудет вам ваше зло, но он никогда не простит и не забудет вашего добра[ss]3L33T@ |
|||
|
||||
| DENNN |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
И все равно - это объекты синхронизации. Неужели настолько лень в инете почитать ? |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |