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

Создайте многопоточное приложение, в котором основной поток поручает выполнение задач рабочим потокам

17.11.2016, 23:53. Показов 741. Ответов 0
Метки c++ (Все метки)

Студворк — интернет-сервис помощи студентам
Задание :
Создайте многопоточное приложение, в котором основной поток поручает выполнение отдельных задач рабочим потокам:
Каждый рабочий поток получает файл, в котором он должен выполнить поиск в текстовом файле на соответствие введенному образцу , а полученные рабочим потоком результаты передаются главному потоку во временном файле; затем выводится количество совпадений результатов поиска.
Вопрос:
Как надо реализовать передачу результатов главному потоку во временный файл?
Мой вариант не записывает во временный файл.
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
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
#include "stdafx.h"
#include "stdlib.h"
#include "windows.h"
#include "iostream"
#include <string>
#include "stdio.h"
#include <fstream>
using namespace std;
int k = 0;
#define BUFSIZE 4096
HANDLE hTempFile;
HANDLE hFile;
DWORD  dwBytesRead, dwBytesWritten, dwBufSize = BUFSIZE;
char szTempName[MAX_PATH];
char buffer[BUFSIZE];
char lpPathBuffer[BUFSIZE];
 
void search(const char* A);
void temp();
 
 
DWORD WINAPI One(LPVOID iNum);
DWORD WINAPI Two(LPVOID iNum);
DWORD WINAPI Three(LPVOID iNum);
 
void main()
{
    setlocale(LC_CTYPE, "Russian");
    HANDLE hThread[3];
    DWORD IDThread[3];
    string s;
 
    cout << "Начало работы потоков" << endl;
    cout << "Введите образец, который хотите найти" << endl;
    hThread[0] = CreateThread(NULL, 0, One, (void*)k, 0, &IDThread[0]); //Создание потока(атрибут защиты, размер стека потка, функция потока, параметр потока, опции создания, идентификатор потока)
    if (hThread[0] == NULL)
    {
        int err = GetLastError();
        cout << "Ошибка создания потока (" << err << ")" << endl;
    }
 
    hThread[1] = CreateThread(NULL, 0, Two, (void*)k, 0, &IDThread[1]); //Создание потока(атрибут защиты, размер стека потка, функция потока, параметр потока, опции создания, идентификатор потока)
    if (hThread[1] == NULL)
    {
        int err = GetLastError();
        cout << "Ошибка создания потока (" << err << ")" << endl;
    }
 
    hThread[2] = CreateThread(NULL, 0, Three, (void*)k, 0, &IDThread[2]); //Создание потока(атрибут защиты, размер стека потка, функция потока, параметр потока, опции создания, идентификатор потока)
    if (hThread[2] == NULL)
    {
        int err = GetLastError();
        cout << "Ошибка создания потока (" << err << ")" << endl;
    }
    WaitForSingleObject(hThread[0], INFINITE);
    WaitForSingleObject(hThread[1], INFINITE);
    WaitForSingleObject(hThread[2], INFINITE);
 
    cout << "Количество совпадений результатов поиска = " << k << endl;
    TerminateThread(hThread[0], 0);
    TerminateThread(hThread[1], 0);
    TerminateThread(hThread[2], 0);
    CloseHandle(hThread[0]);
    CloseHandle(hThread[1]);
    CloseHandle(hThread[2]);
    system("pause");
}
void search(const char* A) {
    string needString, string;
    bool isHave = 0;
    getline(cin, string);
    ifstream ifstream(A);
    while (getline(ifstream, needString))
        if (needString == string) {
            isHave = 1;
            break;
        }
    ifstream.close();
    if (isHave)
    {
        cout << "Введенный образц присутствует\n";
        k++;
    }
    else {
        cout << "Введенного образца нету\n";
    }
}
DWORD WINAPI One(LPVOID iNum) //Функция обратного вызова
{
    const char* str = "filename.txt";
    
    search(str);
    temp();
    return 0;
}
DWORD WINAPI Two(LPVOID iNum) //Функция обратного вызова
{
    const char* str = "filename.txt";
    
    search(str);
    temp();
    return 0;
}
DWORD WINAPI Three(LPVOID iNum) //Функция обратного вызова
{
    const char* str = "filename.txt";
    
    search(str);
    temp();
    return 0;
}
void temp(){
 
    // Откроем существующий файл. 
 
    hFile = CreateFile(L"filename.txt",  // имя файла 
        GENERIC_READ,                   // открыт для чтения 
        0,                              // совместного использования нет 
        NULL,                           // защита по умолчанию 
        OPEN_EXISTING,                  // только существующий файл 
        FILE_ATTRIBUTE_NORMAL,          // атрибуты обычного файла 
        NULL);                          // шаблона атрибутов нет 
    if (hFile == INVALID_HANDLE_VALUE)
    {
        printf("Could not open file.");
        
    }
 
    // Получим временный путь
 
    GetTempPath(dwBufSize,   // длина буфера
        (LPWSTR)lpPathBuffer);      // буфер для пути 
 
                            // Создадим временный файл. 
 
    GetTempFileName((LPCWSTR)lpPathBuffer, // каталог для временных файлов 
        L"NEW",                    // префикс имени временного файла 
        1,                        // создаем уникальное имя 
        (LPWSTR)szTempName);              // буфер для имени 
 
    hTempFile = CreateFile((LPTSTR)szTempName,  // имя файла 
        GENERIC_READ | GENERIC_WRITE, // открыт для чтения и записи 
        0,                            // совместного использования нет 
        NULL,                         // защита по умолчанию 
        CREATE_ALWAYS,                // переписывать существующий файл
        FILE_ATTRIBUTE_NORMAL,        // атрибуты обычного файла 
        NULL);                        // шаблона атрибутов нет 
 
    if (hTempFile == INVALID_HANDLE_VALUE)
    {
        printf("Could not create temporary file.");
    
    }
 
    do
    {
        if (ReadFile(hFile, buffer, 4096,
            &dwBytesRead, NULL))
        {
            
            WriteFile(hTempFile, buffer, dwBytesRead,
                &dwBytesWritten, NULL);
        }
    } while (dwBytesRead == BUFSIZE);
 
    // Закрываем оба файла. 
 
    CloseHandle(hFile);
    CloseHandle(hTempFile); 
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.11.2016, 23:53
Ответы с готовыми решениями:

Параллельное (многопоточное) выполнение мелких задач
Давно не чего не писал на C#, а тут понадобилось кое что сделать, задача такая, есть текстовый файл на много гигобайт, мне надо выдернуть...

Основной поток и асинхронное выполнение
Здравствуйте, пишу функцию подобную этой: function testData(value) { if ( firstFunction(value) ) return 1; if (...

Уничтожить поток, в котором запущено приложение Flask
Продолжение темы https://www.cyberforum.ru/python-network/thread2518984.html Вместо использования собственного протокола и передачи...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.11.2016, 23:53
Помогаю со студенческими работами здесь

Создайте приложение, в котором при активизации переключателей цвет надписи изменяется
Помогите сделать лабу Задания. 1. Создайте приложение, в котором при активизации переключателей цвет надписи изменяется, а при выборе...

Создайте приложение, в котором при выборе из списка соответствующего цвета текста
Создайте приложение, в котором при выборе из списка соответствующего цвета текста, размера шрифта или стиля текста изменялся соответственно...

Создайте новое приложение, в котором на форме расположены Поле ввода, Метка и Кнопка
Создайте новое приложение, в котором на форме расположены Поле ввода, Метка и Кнопка. Пользователь вводит в Поле ввода целое число N. После...

Создайте приложение, в котором машинки едут навстречу друг другу, а когда встречаются, останавливаются
Создайте приложение, в котором машинки едут навстречу друг другу, а когда встречаются, останавливаются.

Создайте приложение (Калькулятор), обеспечивающее ввод двух целых чисел и выполнение над ними арифметических о
Создайте приложение (Калькулятор), обеспечивающее ввод двух целых чисел и выполнение над ними арифметических операций: сложения,...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru