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

> Внимание!

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

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


Бывалый
***

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

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


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

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

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


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


Гость






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

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

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

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

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


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

 



- Текстовая версия 19.09.2025 4:20
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"