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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.03.2013, 16:31   #1
bestnicer
Пользователь
 
Аватар для bestnicer
 
Регистрация: 29.05.2012
Сообщений: 59
Восклицание C++ Хэндлы hProcess и hThread

Объясните, пожалуйста, для чего в программе используются хэндлы процесса и потока (hProcess, hThread) ?Для чистки буфера?
Код:
#include "StdAfx.h"
#include <windows.h>
#include <iostream>
#include <iomanip>
#include <TCHAR.h>
#include <time.h>
#include <conio.h>
#include <stdio.h>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	setlocale( LC_ALL,"Russian" );
	STARTUPINFO si = {};
	PROCESS_INFORMATION pi = {};
	char zn;
	char str[256];
	char str2[256];
	wchar_t strS[256];

	while (true)
	{
		printf(">");
		gets(str); 
		if(!strcmp(str, "exit"))
		break;
		if(str[strlen(str) - 1] == '&')
			zn = '&';
		else
			zn = '#';
		sscanf(str, "%s ", str2);  
		mbstowcs(strS, str2, 256);

		if ( !CreateProcess(NULL, strS, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi) )
		{
			cout << "Файл  " << str2 << " не найден!" << endl;
			continue;
		}
			if(zn == '&')
				continue;

			WaitForSingleObject(pi.hProcess, INFINITE);

			if ( !PostThreadMessage(pi.dwThreadId, WM_QUIT, 0, 0) )
				continue;

			CloseHandle(pi.hProcess);
			CloseHandle(pi.hThread);
	}
	return 0;
}
bestnicer вне форума Ответить с цитированием
Старый 07.03.2013, 17:25   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Ожидает завершения созданного процесса.
Зачем пытается послать WM_QUIT уже завершенному процессу для меня загадка.
waleri вне форума Ответить с цитированием
Старый 08.03.2013, 16:01   #3
bestnicer
Пользователь
 
Аватар для bestnicer
 
Регистрация: 29.05.2012
Сообщений: 59
По умолчанию

Не могли бы немного подробнее описать, как они используются - с точки зрения операционных систем?
bestnicer вне форума Ответить с цитированием
Старый 18.03.2013, 17:33   #4
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
По умолчанию

Цитата:
Объясните, пожалуйста, для чего в программе используются хэндлы процесса и потока (hProcess, hThread)
Цитата:
WaitForSingleObject(pi.hProcess, INFINITE);
WaitForSingleObject:"Waits until the specified object is in the signaled state or the time-out interval elapses."
В качестве объекта у вас процесс, "сигнальным состоянием" для него является завершение работы. Ограничения по ожиданию нет(INFINITE), т.е. он будет ждать пока процесс не завершится.
Цитата:
PostThreadMessage(pi.dwThreadId, WM_QUIT, 0, 0)
Назначения этой строки мне неясно.

Цитата:
Не могли бы немного подробнее описать, как они используются - с точки зрения операционных систем?
Хэндлы? Вы хотите знать как они используются "внутри" системы?
Kix.IV вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли читать DwProcessId,hProcess после CloseHandle(hProcess) после создания процесса через CreateProc Человек_Борща Общие вопросы Delphi 3 09.01.2011 01:07