Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.10.2011, 12:05   #1
alezha
Форумчанин
 
Регистрация: 16.04.2011
Сообщений: 126
По умолчанию Проблема с kbhit() и процессами

Подскажите как завершите оба (родителя и дочернего) процесса используя kbhit().
Условие задачи: Разработать консольное приложение, в котором базовый процесс порождает дочерний. Для каждого процесса предусмотрена своя область вывода, в которой он выводит текущее системное время
Код:
#include <conio.h>
#include <stdio.h>
#include <time.h>
#include <windows.h>
void main(int argc, char *argv[])
{
	time_t t;   
	STARTUPINFO StartInfo; 
	COORD position = {28,5}; 
	PROCESS_INFORMATION ProcessInfo;  
	HANDLE ConsoleHandle = GetStdHandle(STD_OUTPUT_HANDLE);
	
	ZeroMemory(&StartInfo, sizeof(StartInfo));
	StartInfo.hStdOutput = ConsoleHandle;

	if( argc == 2 && strcmp(argv[1],"CMD") == 0) position.Y = 19;
	else if( !CreateProcess(NULL,"Lab01.win.exe CMD",NULL,NULL,FALSE,0,NULL,NULL,&StartInfo,&ProcessInfo) ) return;

	while(!kbhit())
	{
		SetConsoleCursorPosition(ConsoleHandle,position);
		time(&t);
		printf("%s",ctime(&t));
		Sleep(1000);  
	}
	WaitForSingleObject(ConsoleHandle,0);
	return;
}
alezha вне форума Ответить с цитированием
Старый 08.10.2011, 13:17   #2
haruhi
Форумчанин
 
Аватар для haruhi
 
Регистрация: 05.10.2011
Сообщений: 368
По умолчанию

зачем смешивать API и С-шные функции?
вместо kbhit лучше использовать ReadConsoleInput
Не стоит будить спящего Бога! (с) Меланхолия Харухи Судзумии
haruhi вне форума Ответить с цитированием
Старый 10.10.2011, 16:35   #3
alezha
Форумчанин
 
Регистрация: 16.04.2011
Сообщений: 126
По умолчанию

мне надо именно с kbhit().
alezha вне форума Ответить с цитированием
Старый 10.10.2011, 16:51   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
ну а хендл дочернего у вас будет в ProcessInfo
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.10.2011, 19:54   #5
alezha
Форумчанин
 
Регистрация: 16.04.2011
Сообщений: 126
По умолчанию

Вот готовая программа.
Код:
#include <conio.h>
#include <stdio.h>
#include <time.h>
#include <windows.h>
void main(int argc, char *argv[])
{
	if (argc == 1)
	{
		time_t t;   // время
		STARTUPINFO StartInfo; //параметр окна
		COORD position = {28,5}; // позиция курсора
		PROCESS_INFORMATION ProcessInfo;  // инфа о процессе(идентификаторы и дескрипторы)
		HANDLE ConsoleHandle = GetStdHandle(STD_OUTPUT_HANDLE);// извлекаем дескриптор для ввода данных

		ZeroMemory(&StartInfo, sizeof(StartInfo));
		StartInfo.hStdOutput = ConsoleHandle;

		if( argc == 2 && strcmp(argv[1],"CMD") == 0) 
			position.Y = 19;
		else 
			if( !CreateProcess(NULL,"Lab01.win.exe CMD",NULL,NULL,FALSE,0,NULL,NULL,&StartInfo,&ProcessInfo) ) 
				return;
		DWORD pdwExitCode;
		while(1)
		{	
			SetConsoleCursorPosition(ConsoleHandle,position);
			time(&t);
			printf("%s",ctime(&t));
			Sleep(1000);  // остнавливает поток
			GetExitCodeProcess(ProcessInfo.hProcess,&pdwExitCode);
			if (pdwExitCode!= STILL_ACTIVE)
			{
				//ExitProcess(0);
				return;
			}
			
		}
	}
	else
	{
		while(!kbhit())
		{
			time_t t;
			time(&t);
			printf("%s",ctime(&t));
			Sleep(1000);  // остнавливает поток
		}
	}
	return;
}
alezha вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с процессами niki2012 Общие вопросы Delphi 12 11.01.2011 19:16
заменить kbhit() kaljan775 Общие вопросы C/C++ 8 16.10.2010 18:50
проблема с функцией kbhit() и циклом for das Ma:dchen Общие вопросы C/C++ 3 09.04.2010 16:08
Управление процессами An123 Помощь студентам 2 18.12.2009 23:14
управление процессами An123 Общие вопросы C/C++ 5 29.11.2009 14:46