1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
| Andrewshkovskii |
18.12.2008 17:33
Сообщение
#1
|
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 222 Пол: Мужской Реальное имя: Andrew Репутация: 0 |
Есть желание написать программу, реализующую действия ракеты и её цели. Задаются координаты цели для ракеты, стрелками на клавиатуре можно менять положение цели в 2-х мерном пространстве, ракета должна отслеживать цель. Все это должно производиться "параллельно"..
Код исходный большой(т.е там файлов листинга просто много). Я знаю, что один вольво отвечает на мои безумные посты, на него и надежда вся. В общем, в коде я оставил комментарии, где происходит "неконтролируемое", они в 2х файлах main и realiz.cpp. Код в архиве... Сообщение отредактировано: Andrewshkovskii - 18.12.2008 17:58 Прикрепленные файлы
ev.zip ( 3.04 килобайт )
Кол-во скачиваний: 162 |
![]() ![]() |
| 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
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![]() ![]() |
|
Текстовая версия | 8.12.2025 14:20 |