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

Процесс порождает 10 дополнительных нитей

08.12.2014, 20:06. Показов 1492. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Процесс порождает 10 дополнительных нитей, каждая из которых выдает на экран сообщение о своем запуске и свой номер. Далее в цикле основная нить задает пользователю вопрос, какую нить надо завершить. Когда завершены все дополнительные нити, завершается и весь процесс.

Имеется код:
C++ (Qt)
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <iostream>
#include <Windows.h>
#include <stdio.h>
#include <tchar.h>
 
using namespace std;
 
int number = 0;
 
 
DWORD WINAPI MyCreateThread(LPVOID lpParam )
{
    
    HANDLE *event = (HANDLE *)lpParam;
    cout << "Thread " << number++ << " was successfully created" << endl;
    DWORD sig = WaitForSingleObject(*event, INFINITE);
    switch (sig)
    {
    case WAIT_OBJECT_0: cout << "Thread " << number << " receive exit" << endl; break;
    case WAIT_FAILED: cout << "Thread " << number << " wait failed !" << endl; break;
    default: cout << "Thread " << number << " other error" << endl; break;
    }
 
    CloseHandle(*event);
    return 0;
}
 
void ShowLivingThread(DWORD arr[])
{
    for (int i = 0; i<10; i++)
    {
        if (arr[i] != NULL)
        {
            cout << "Thread " << i << " is living" << endl;
        }
    }
 
}
 
 
int main()
{
    HANDLE arrayOfThreadsHandle[10];
    DWORD arrayOfThreadsId[10];
    HANDLE hEvent[10];
 
    for (int i = 0; i<10; i++)
    {
        hEvent[i] = CreateEvent(NULL, FALSE, FALSE, NULL);
        arrayOfThreadsHandle[i] = CreateThread(NULL, 0, MyCreateThread, &hEvent[i], 0, &arrayOfThreadsId[i]);
        WaitForSingleObject(arrayOfThreadsHandle[i], 100);
    }
 
    int n;
    while (number>0)
    {
        cout << "Which thread do you want to delete?" << endl;
        ShowLivingThread(arrayOfThreadsId);
        cin >> n;
 
        if (n >= 0 && n<10)
        {
            for (int i = 0; i < 10; i++)
            {
                if (arrayOfThreadsId[n] == arrayOfThreadsId[i])
                {
                    SetEvent(hEvent[i]);
                }
            }
            if (arrayOfThreadsId[n] != NULL)
            {
                CloseHandle(arrayOfThreadsHandle[n]);
                arrayOfThreadsId[n] = NULL;
                number--;
 
            }
            else
            {
                cout << "This thread was delete" << endl;
            }
        }
        else
        {
            cout << "Wrong number to delete!" << endl;
        }
        
    }
 
    return 0;
}
Работает как-то странно.
Выдает неверные номера нитей.
Помогите исправить.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.12.2014, 20:06
Ответы с готовыми решениями:

Процесс порождает 10 дополнительных нитей
Вот было такое задание: Процесс порождает 10 дополнительных нитей, каждая из которых выдает на...

Процесс порождает 7 дочерних процессов-потомков
Процесс порождает 7 дочерних процессов-потомков. Процессы выводят сообщение о старте, выполняют...

Написать программу, которая порождает дочерний процесс
Помогите пожалуйста, очень нужно, я в этом не разбираюсь, дали задание в универе :( Написать...

Напишите и отладьте программу, в которой процесс-предок порождает два процесса
Напишите и отладьте программу, в которой процесс-предок порождает два процесса, каждый из которых...

0
08.12.2014, 20:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.12.2014, 20:06
Помогаю со студенческими работами здесь

Процесс 1 открывает файл и порождает потомка 2, после этого пишет в файл N байт, закрывает его и завершается
Здравствуйте! Есть задание:&quot;Процесс 1 открывает файл и порождает потомка 2, после этого пишет в...

Выражение не порождает значение
Помогите исправить Вот в этой строке выдает ошибку &quot;Выражение не порождает значение&quot;...

создание нитей
Привет всем! Задание: Написать программу, создающую два потока. Оба потока одновременно читают...

Синхронизация работы нитей
Синхронизировать три нити одного процесса с помощью автоматической синхронизации. Каждая...


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

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