Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Потоки и ввод с клавиатуры 
:(
    Опции темы
enzaime
Дата 11.5.2014, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем привет, у меня вот какая проблема:
не получается во время выполнения потока выполнить ввод с клавиатуры, так как поток автоматически останавливается. (Если убрать оператор cin, то всё поток будет выполняться). Может то что я делаю глупо, но это учебная задача (точнее часть задачи сама задача сделать игру крестики - нолики (потоками))
Код

#include "stdafx.h"
#include <windows.h>
#include <iostream>
using namespace std;
void func()
{
    int a = 0;
    while (true)
    {
        printf("input start\n");
        cin >> a;
        printf("value %d\n", a);
    }
}
int _tmain(int argc, _TCHAR* argv[])
{
    int id1 = 0;
    HANDLE hThread1 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)func, NULL, 1, (LPDWORD)&id1);
    getchar();
    return 0;
}

PM MAIL   Вверх
Cheloveck
Дата 11.5.2014, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

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



Ты не можешь читать из стандартного ввода сразу в двух потоках, он блокиркется. В твоём случае начинает выполняться функция getchar, после чего программа завершается. 
Основной поток придётся блокировать как-то по-другому, если тебе надо чтиать с консоли в дочернем потоке, например мьютексом.

Это сообщение отредактировал(а) Cheloveck - 11.5.2014, 12:18


--------------------
user posted image
PM Jabber   Вверх
enzaime
Дата 11.5.2014, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



так если убрать getchar() ничего не работает, даже printf("input start\n"); не срабатывает. Я специально пример до предела упростил, но даже здесь нихера не ясно. Вроде бы понятно, что поток hThread1 блокируется вводным потоком cin (scanf), так как cin вложен в hThread1, то они оба завершаются так и не отработав, но как сделать правильно я не понимаю.
PM MAIL   Вверх
Cheloveck
Дата 12.5.2014, 00:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

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



Цитата(enzaime @  11.5.2014,  13:07 Найти цитируемый пост)
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)func, NULL, 1, (LPDWORD)&id1);

Я тут не нашёл, что значит 1 в предпоследнем параметре, там должен быть ноль!


--------------------
user posted image
PM Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0426 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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