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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание потока в консольном приложении 
:(
    Опции темы
4epT
Дата 21.12.2010, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Добрый день! Я делаю на С++ в консоли простую игрушку ... нужно сделать так что бы 2 человека могли управлять своими человечками (перемещаясь по матрице). Для каждого отведены отдельные клавиши.

Дайте пожалуйста пример когда или название функции с ее сигнатурой как это правильно делается)

спасибо!
PM MAIL   Вверх
KaraKum
Дата 21.12.2010, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Если "Windows", то CreateThread() :
Код

DWORD Function(LPVOID parameter)
{
     printf("Hello, thread!\n");
}
CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)Function, NULL, NULL, NULL);


Если Linux, то pthread_create():
Код

void Function(void* parameter)
{
     printf("Hello, thread!\n");
}
pthread_create(new pthread_t, NULL, Function, NULL);


Это сообщение отредактировал(а) KaraKum - 21.12.2010, 17:17
PM MAIL WWW   Вверх
4epT
Дата 21.12.2010, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(KaraKum @ 21.12.2010,  17:14)
Если "Windows", то CreateThread() :
Код

DWORK Function(LPVOID parameter)
{
     printf("Hello, world's thread!\n");
}
CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)Function, NULL, NULL, NULL);

да, под винду ..

Спасибо ) попробую))

А как закрыть поток ?))
PM MAIL   Вверх
KaraKum
Дата 21.12.2010, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А пользователи нажимают кнопки на одном компьютере?
PM MAIL WWW   Вверх
4epT
Дата 21.12.2010, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(KaraKum @ 21.12.2010,  17:18)
А пользователи нажимают кнопки на одном компьютере?

да. С этим могут быть проблемы?
PM MAIL   Вверх
KaraKum
Дата 21.12.2010, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(4epT @ 21.12.2010,  18:18)
Цитата(KaraKum @ 21.12.2010,  17:18)
А пользователи нажимают кнопки на одном компьютере?

да. С этим могут быть проблемы?

Если создание потоков связано с вводом пользователей, то не обязательно создавать потоки.
С наличием в программе потоков (то есть не только основной функции main()) могут быть проблемы из-за параллельного использования одной и той же памяти (данных).
Лучше избегать их создания если есть такая возможность, а в данном случае она вроде как есть...

Это сообщение отредактировал(а) KaraKum - 21.12.2010, 17:22
PM MAIL WWW   Вверх
4epT
Дата 21.12.2010, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну вот к примеру .... я хочу реализовать змейку ... но что бы одновременно бегало 2 змейки в консоли. Насколько я понимаю, если один пользователь будет очень быстро нажимать на клавиши, то второй просто не сможет двигаться ... или я ошибаюсь?))
PM MAIL   Вверх
KaraKum
Дата 21.12.2010, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Второй поток здесь не нужен.
Нажимаем кнопку - двигаем змейку в сторону; для другой змейки другие кнопки.
А залипание клавиш зависит уже от клавиатуры и нажимаемых групп кнопок (некоторые кнопки нельзя нажать больше двух штук, а некоторые можно и сразу 4 если правильно разбросать их по клаве), а будет ли игрок успевать нажимать клавиши зависит уже от его настойчивости и ширины плеч оппонента  smile 
PM MAIL WWW   Вверх
4epT
Дата 21.12.2010, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(KaraKum @ 21.12.2010,  17:54)
Второй поток здесь не нужен.
Нажимаем кнопку - двигаем змейку в сторону; для другой змейки другие кнопки.
А залипание клавиш зависит уже от клавиатуры и нажимаемых групп кнопок (некоторые кнопки нельзя нажать больше двух штук, а некоторые можно и сразу 4 если правильно разбросать их по клаве), а будет ли игрок успевать нажимать клавиши зависит уже от его настойчивости и ширины плеч оппонента  smile

 smile  посмеялся )))
хорошо, а такой вариант ... я зажимаю кнопку .... и я ловлю нажатие клавиш в бесконечном while при помощи getch(); Тут тоже не нужен второй поток?))))
PM MAIL   Вверх
KaraKum
Дата 21.12.2010, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ой, я невнимательно прочитал в вопросе про консоль.
Хмм... подразумевается использование ASCII-графики?  smile

Добавлено через 59 секунд
Я думаю будет проще создать обычное окно и рисовать в нём посредством GDI.
PM MAIL WWW   Вверх
4epT
Дата 21.12.2010, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(KaraKum @ 21.12.2010,  18:02)
Ой, я невнимательно прочитал в вопросе про консоль.
Хмм... подразумевается использование ASCII-графики?  smile

Добавлено @ 18:03
Я думаю будет проще создать обычное окно и рисовать в нём посредством GDI.

Я с MFC не знаком ( на с++ с оконным интерфейсом писал только с использованием WinAPI ... а там с GDI сплошные проблемы(

И все же что посоветуешь?) в консоли с потоком?) 
PM MAIL   Вверх
KaraKum
Дата 21.12.2010, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



GDI относится к WinAPI - то есть должен быть доступен сразу после установки Visual Studio Express Edition (бесплатная которая и скачивается с сайта майрософта).
На консоли - это, конечно, дохлый номер. Идеальный вариант - на OpenGL, но займёт много времени его освоение (недели), а на GDI можно быстро что-нибудь начать делать.
PM MAIL WWW   Вверх
4epT
Дата 21.12.2010, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(KaraKum @ 21.12.2010,  18:10)
GDI относится к WinAPI - то есть должен быть доступен сразу после установки Visual Studio Express Edition (бесплатная которая и скачивается с сайта майрософта).
На консоли - это, конечно, дохлый номер. Идеальный вариант - на OpenGL, но займёт много времени его освоение (недели), а на GDI можно быстро что-нибудь начать делать.

Ясно ... ( у меня просто по сути есть 3-4 дня, до защиты курсового .... буду думать)

Спасибо за помощь)
PM MAIL   Вверх
Batbko
Дата 21.12.2010, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Кстати WM_KEYDOWN в виндовой консоли никто не отменял smile хотя это и изврат но достучаться до окна не так уж и сложно...
и даже рисовать на нем с помощью GDI  и добавлять элементы управления, мои знания API изрядно проржавели но даже где то на этом форуме я видел алгоритм получения главного окошка процесса,
а дальше дело техники : остаеться только правильно подменить оконную процедуру ;)
Хотя если для курсача и если препод смотрит в исходники то лучше не извращаться 
PM MAIL   Вверх
KaraKum
Дата 21.12.2010, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Всё вышеперечисленное можно заменить одной строчкой вызова функции создания нормально виндового окна.
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0854 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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