Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/35: Рейтинг темы: голосов - 35, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 21.01.2013
Сообщений: 69
1

Хэндлы hProcess и hThread

07.03.2013, 16:56. Показов 6731. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Объясните, пожалуйста, для чего в программе используются хэндлы процесса и потока (hProcess, hThread) ?Для чистки буфера?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#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;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.03.2013, 16:56
Ответы с готовыми решениями:

Различные хэндлы
Как известно все хэндлы, которые используются в win api есть не что иное как указатели на void....

Как получить хэндлы системного процесса?
Добрый день. Пытаюсь получить handle какого-нибудь системного процесса. Нашел в инете пример,...

Изменение PID или hProcess
Доброго дня все! Люди, как изменить пид процесса или его хендл? (Я имею для самого себя)

Хэндлы или потоки в C++11
Здравствуйте. Помогите новичку выполнить данную задачку на C++11: 1. Написать программу,...

11
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,495
Записей в блоге: 1
07.03.2013, 18:27 2
в смысле "зачем". Чтобы создавать и убивать процессы в цикле.
программа запускает из командной строки введённые файлы процессов
1
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
07.03.2013, 18:33 3
C++
1
2
3
WaitForSingleObject(pi.hProcess, INFINITE);
if ( !PostThreadMessage(pi.dwThreadId, WM_QUIT, 0, 0) )
        continue;
Подождать, когда процесс завершится, и потом отправить его потоку сообщение... Гениально.
1
0 / 0 / 0
Регистрация: 21.01.2013
Сообщений: 69
08.03.2013, 16:04  [ТС] 4
Не могли бы немного подробнее описать, как они используются - с точки зрения операционных систем?
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,495
Записей в блоге: 1
08.03.2013, 16:20 5
А зачем тебе это?
0
0 / 0 / 0
Регистрация: 21.01.2013
Сообщений: 69
08.03.2013, 16:22  [ТС] 6
Препод спросил, как я это понимаю...а я совсем никак...(
0
78 / 78 / 9
Регистрация: 26.12.2011
Сообщений: 217
08.03.2013, 20:20 7
Цитата Сообщение от Somebody Посмотреть сообщение
Подождать, когда процесс завершится, и потом отправить его потоку сообщение... Гениально.
Суть в том, что если первичного потока уже нет, мы закроем описатели на него и сам процесс, которому он принадлежал.
Некая "подстраховка" получается.
C++
1
2
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
Иначе начнем цикл сначала.
Но что-то мне подсказывает, что эта часть кода никогда не выполнится )))

Объясните, пожалуйста, для чего в программе используются хэндлы процесса и потока (hProcess, hThread) ?Для чистки буфера?
Выше изложил.
1
0 / 0 / 0
Регистрация: 21.01.2013
Сообщений: 69
09.03.2013, 05:51  [ТС] 8
А как правильно можно сделать?
0
78 / 78 / 9
Регистрация: 26.12.2011
Сообщений: 217
09.03.2013, 19:13 9
Цитата Сообщение от axioma! Посмотреть сообщение
А как правильно можно сделать?
Как минимум, убрать эту часть кода:
C++
1
2
if ( !PostThreadMessage(pi.dwThreadId, WM_QUIT, 0, 0) )
        continue;
1
0 / 0 / 0
Регистрация: 21.01.2013
Сообщений: 69
14.03.2013, 18:32  [ТС] 10
А что такое первичный поток? Что значит, что его уже нет?
0
78 / 78 / 9
Регистрация: 26.12.2011
Сообщений: 217
14.03.2013, 21:17 11
Цитата Сообщение от axioma! Посмотреть сообщение
А что такое первичный поток? Что значит, что его уже нет?
Название ведь говорящее ))
Когда система создает процесс, она создает и основной поток, который называют первичным.
Обычно в нем и размещается основной код.
Если углубляться, то ОС всегда оперирует только с потоками, а процессы - "мнимые" оболочки таковых.
1
0 / 0 / 0
Регистрация: 21.01.2013
Сообщений: 69
16.03.2013, 02:52  [ТС] 12
Помогите мне еще описать, пожалуйста, - так подробно, как сможете - как взаимодействуют между собой эта программа и операционная система?Прям очень надо((
0
16.03.2013, 02:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.03.2013, 02:52
Помогаю со студенческими работами здесь

Хэндлы у Fire Monkey
Ребяты!... Хелп ми sos!.. Нужно узнать позицию прокрутки в ListBox, нашёл способ через Хэндл...

Delphi xe7 multi-device Form , хэндлы окон и работа с ними
Писал прогу для послания нажатий клавиш в неактивое окно в delphi xe4. По аналогии стал писать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru