Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Win32 API - Вопрос по WinAPI

Ответить
Настройки темы
Win32 API - Вопрос по WinAPI

Аватара для SeRgikON

Новый участник


Сообщения: 34
Благодарности: 1

Профиль | Отправить PM | Цитировать


Вопрос по синхронизации процессов\потоков. Есть программа, в ней два потока. В одном ввод символа, в другом выводится "*" если мы ввели цифру (в случае ввода символа ничего не выводится, и нужно повторить ввод). Как сделать чтобы программа принимала значение (цифру или символ) и сразу запускался второй поток, выводящий "*"? (сейчас ввод данных производится после нажатия Enter'a). Подскажите через что можно реализовать.

Отправлено: 23:44, 02-06-2011

 

Старожил


Сообщения: 154
Благодарности: 39

Профиль | Отправить PM | Цитировать


всмысле через что можно реализовать? например в с# мона использовать System.Threading; оно имеет класс потока - Thread.
как я понимаю ты это делаешь в консоле - поэтому у тебя и затык с энтером. ты небось с консоли пытаешься получить строку что в корне неверно тебе нужно получать посимвольно. тогда энтер в конце не требуется.
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:19, 04-06-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для crashtuak

Старожил


Сообщения: 467
Благодарности: 25

Профиль | Отправить PM | Цитировать


SeRgikON, вы имеете в виду потоки ввода/вывода? Если да, то просто можно с одного потока (вводящего символ) считать символ, проверить, цифра ли, если истина, вывести во втором потоке *. Если у вас разные нити приложения, в которых ваша программа исполняется, тогда тут нужно немного по другому...(немного не понятно про какие потоки идет речь, в Java, на пример, потоки ввода-вывода называются Stream, а нити приложения-Thread).

-------
Мне надо не так много "Полезных сообщений", чтоб сровнять их количество с моими постами :).

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:46, 04-06-2011 | #3


Старожил


Сообщения: 154
Благодарности: 39

Профиль | Отправить PM | Цитировать


crashtuak,
да собственно говоря в "с" подобных языках также - потоки ввода/вывода: базовый класс - Stream, многозадачность - Thread

Отправлено: 15:57, 04-06-2011 | #4


Аватара для crashtuak

Старожил


Сообщения: 467
Благодарности: 25

Профиль | Отправить PM | Цитировать


Beyound, та я то знаю(от вас), просто SeRgikON не написал про какие именно потоки идет речь

-------
Мне надо не так много "Полезных сообщений", чтоб сровнять их количество с моими постами :).


Отправлено: 16:20, 05-06-2011 | #5


Аватара для SeRgikON

Новый участник


Сообщения: 34
Благодарности: 1

Профиль | Отправить PM | Цитировать


crashtuak, потоки всмысле "нитей" приложения. и если можно поподробней, про "немного по другому"

код:
читать дальше »

Код: Выделить весь код
 using namespace std; 
BOOL g_hMutex=FALSE;
 DWORD WINAPI Thread1(void *arg) //функция принимающая пустой аргумент-указатель 
{ setlocale (LC_ALL,"russian");
 char str[2]; int grade=0;
 cout<<endl<<"Ввод:";
 while(grade==0) 
{ cin >> str; 
grade=atoi(str); 
if (grade==0) cout<<"Не число!\nВвод:";
 } 
g_hMutex=TRUE; 
return NULL; } 
DWORD WINAPI Thread2(void *arg) 
{ cout<<"Вывод:"<<'*'; 
Sleep(100); 
g_hMutex=FALSE;
 return NULL; } 
int main() { 
DWORD idThread1;
 HANDLE hThread1; 
DWORD idThread2; 
HANDLE hThread2; 
while(1) { 
hThread1=CreateThread(NULL,0,Thread1,NULL,0,&idThread1); 
WaitForSingleObject(hThread1,INFINITE);
 if(g_hMutex==TRUE) 
{ hThread2=CreateThread(NULL,0,Thread2,NULL,0,&idThread2); 
Sleep(100); } 
else {
 system("pause");
 TerminateThread(hThread1,0); //завершение потоков 
TerminateThread(hThread2,0); 
return 0; 
} } }

Отправлено: 14:25, 06-06-2011 | #6


Аватара для crashtuak

Старожил


Сообщения: 467
Благодарности: 25

Профиль | Отправить PM | Цитировать


1) Инклудим conio.h
2) Используем функцию _getch(). Возвращает int(код введенного символа '0'=48..'9'=57).
3) Проверяем введенный символ на принадлежность к числам, вызываем поток для печати "*".
Пример кода:
Код: Выделить весь код
#include <conio.h>

int _tmain(int argc, _TCHAR* argv[])
{
	int n;
	do
	{
		n = _getch();
	} while( n != 'C' );
	return 0;
}
Далее по вашему коду: зачем данные действия разносить в разные потоки? TerminateThread(hThread1,0); помоему не имеет смысла, так как есть WaitForSingleObject(hThread1,INFINITE); которая(если не ошибаюсь) дожидается завершения потока...

-------
Мне надо не так много "Полезных сообщений", чтоб сровнять их количество с моими постами :).

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:10, 07-06-2011 | #7


Аватара для SeRgikON

Новый участник


Сообщения: 34
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

Отправлено: 19:40, 07-06-2011 | #8


Аватара для crashtuak

Старожил


Сообщения: 467
Благодарности: 25

Профиль | Отправить PM | Цитировать


Понятно... А
Цитата crashtuak:
Пример кода: »
работает?

У меня почему то с сложными условиями в цикле не работало, пришлось сделать контрольную переменную типа bool, и в теле цикла пробегая по swicth устанавливать контрольную переменную в нужное состояние...

-------
Мне надо не так много "Полезных сообщений", чтоб сровнять их количество с моими постами :).


Отправлено: 22:19, 07-06-2011 | #9


Аватара для SeRgikON

Новый участник


Сообщения: 34
Благодарности: 1

Профиль | Отправить PM | Цитировать


пример не работает, ничего не вводится

Отправлено: 22:58, 07-06-2011 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Win32 API - Вопрос по WinAPI

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Хитрый вопрос по List-View (WinApi) pva Программирование и базы данных 3 17-05-2005 13:38
Тяжёлый вопрос про COMBOBOX (WinApi) pva Программирование и базы данных 9 16-07-2004 15:24
WinAPI Guest Программирование и базы данных 1 19-03-2004 03:14
Книга по WinAPI antonym Программирование и базы данных 2 04-05-2003 11:59
WinApi fLANkeR Программирование и базы данных 3 25-01-2003 08:15




 
Переход