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

Хэндлы hProcess и hThread

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

Студворк — интернет-сервис помощи студентам
Объясните, пожалуйста, для чего в программе используются хэндлы процесса и потока (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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.03.2013, 16:56
Ответы с готовыми решениями:

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

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

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

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru