IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Ракета и Цель., Хаос происходящий в потоках. c++/minGW
сообщение
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 222
Пол: Мужской
Реальное имя: Andrew

Репутация: -  0  +


Есть желание написать программу, реализующую действия ракеты и её цели. Задаются координаты цели для ракеты, стрелками на клавиатуре можно менять положение цели в 2-х мерном пространстве, ракета должна отслеживать цель. Все это должно производиться "параллельно"..

Код исходный большой(т.е там файлов листинга просто много). Я знаю, что один вольво отвечает на мои безумные посты, на него и надежда вся.smile.gif
В общем, в коде я оставил комментарии, где происходит "неконтролируемое", они в 2х файлах main и realiz.cpp. Код в архиве...

Сообщение отредактировано: Andrewshkovskii -


Прикрепленные файлы
Прикрепленный файл  ev.zip ( 3.04 килобайт ) Кол-во скачиваний: 246
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Задумка неплохая, НО... Объясни мне, зачем у тебя потоки создаются, делают одно действие, и удаляются?

Я бы сделал так: Запускаешь сразу после того как ввел координаты цели, оба потока. Функции обоих потоков зацикливаешь, чтобы они не завершались, до тех пор, пока... Ну, например, пока цель не будет сбита (в этот момент какой-нибудь глобальный флажок перебросится в TRUE, и оба потока завершатся). А потом в основном потоке приложения уже читаешь клавишу, записываешь ее коды (да, да... Именно коды, все кнопки управления курсором возвращают 2 байта, первый = 0, второй - то, что ты обрабатываешь), на время изменения переменной, хранящей код нажатой клавиши, устанавливаешь событие, блокируя потоку ChangeCoordTarget доступ к этой переменной, пускай в это время он ждет снятия события (второй поток в это время может продолжать работать, его ничего не должно держать), а потом, как только переменная key "разблокирована", поток ChangeCoordTarget опять продолжает работать: читает содержимое key, и, если оно не = 0, изменяет позицию цели... Поскольку и один и второй поток у тебя работает с данными через указатели, то следующий же цикл чтения потоком MoveToTarget уже будет работать с обновленными координатами цели.

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

Понимаешь идею, или не совсем? У тебя что-то похожее, но не надо постоянно создавать/уничтожать потоки, и не надо блокировать работу одного потока на ВЕСЬ цикл работы другого, достаточно запретить им обращаться к одной и той же переменной в разных режимах (когда один - пишет, другой - читает)
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Andrewshkovskii   Ракета и Цель.   18.12.2008 21:33
Andrewshkovskii   с одной проблемой в case разобрался. совсем забыл …   18.12.2008 22:00
volvo   А можно объяснить, что ты задумывал сделать вот ту…   18.12.2008 22:32
Andrewshkovskii   switch (choise) { case 'n':// если ответ…   18.12.2008 22:45
Andrewshkovskii   Одну проблему нашел, где вычисляется соотношение к…   18.12.2008 23:35
volvo   Задумка неплохая, НО... Объясни мне, зачем у тебя …   19.12.2008 0:12
Andrewshkovskii   Честно говоря не совсем. НЕ совсем я понимаю в син…   19.12.2008 0:19
volvo   Смотри... Я ничего не менял в файлах Rocket.cpp и …   19.12.2008 2:01
Andrewshkovskii   ну интересуют все закомментированные инструкции, в…   19.12.2008 3:24
volvo   Нет-нет... Это как раз для того, чтобы показать те…   19.12.2008 3:56
Andrewshkovskii   я сделал такое лицо сейчас - :dry: У меня лишь п…   19.12.2008 4:08
volvo   вот сейчас тупо вставил твой код, попробывал …   19.12.2008 4:21
Andrewshkovskii   Volvo, скажу одно - тебе можно только позавидовать…   19.12.2008 4:24
volvo   Если убрать SetEvent в ChangeCoordTarget, то поток…   19.12.2008 5:12
Andrewshkovskii   про аски-код - не заметил, извиняюсь. Странно, но …   19.12.2008 5:22
volvo   Кстати, чтобы ракета наводилась на цель, достаточн…   19.12.2008 5:25
Andrewshkovskii   Про вывод из потоков понятно.НО проблема-то не в в…   19.12.2008 5:30
volvo   Мой вариант функции слежения тоже работает стабиль…   19.12.2008 5:36
Andrewshkovskii   Missile at : 8 ,-8 missile report: target at 15278…   19.12.2008 5:45


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 6.11.2025 21:18
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name