Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
1 / 1 / 0
Регистрация: 04.10.2018
Сообщений: 84
1

Нужно переделать программу, которая создает поток.Родительский и вновь созданный поток должны распечатать десять строк

26.10.2018, 01:36. Просмотров 673. Ответов 2
Метки нет (Все метки)

Напишите программу, которая создает поток. Используйте атрибуты по умолчанию. Родительский и вновь созданный поток должны распечатать десять строк текста так, чтобы вывод родительского и дочернего потока был синхронизован: сначала родительский поток выводил бы две строки, затем дочерний три строки текста, затем родительский две строки и т.д. Используйте мьютексы.

Вот есть код, но нужно как-то переделать таким образом через bool, чтобы при завершении потока если true начинался новый.Таким образом, чтобы было согласование между ними, я, конечно, не эксперт, но препрод сказал, что, если запустить эту программу 1млн раз выдаст ошибку
Можно использовать WaitForSingleObject(hMutex,INFIITE) процедура ждет, когда мьютекс освободится, а затем блокирует его
Не знаю, как все это сделать
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
#include"stdafx.h"
#include<iostream>
#include<windows.h>
#include<string>
#include<io.h>
#include<thread>
#include<mutex>
#include<fstream>
using namespace std;
 
//ДЕСЯТЬ СТРОК
 
 
void func(ifstream &file, mutex &mtx,int len, const  std::string & name)
{
    string str;//строковая переменная
    while (!file.eof())//проверочка на наличие строк 
    {
        mtx.lock(); //Блокирует мьютекс
        for (int i = 0; i < len; i++) // len - сколько строк должно быть выведено
        {
            if (!getline(file, str))  //Получение строки из файла
                break;
 
            cout << name << str << endl;//Вывод
        }
        mtx.unlock(); //Разблокирует мьютекс
        Sleep(1000);//приостановка программы
    }
}
 
 
int main()
{
    setlocale(LC_ALL, "rus");//Подключение русского языка
    mutex mtx; //Переменная типа мьютекс
    ifstream file("1.txt"); //Открытие файла для чтения строк
 
    if (!file.is_open())//проверка наличия файла
 
        cout << "Файл не существует!";
    else if (file.peek() == EOF)//проверка на наличие строк
        cout << "Файл пуст!";
    else
    {
        
        thread t(func, ref(file), ref(mtx), 2, "\tРодительский поток: ");
        SetColor(LightBlue, Black);
        func(file, mtx, 3, "Дочерний поток: ");
        t.join();
    }
    file.close();//закрытие файла
    cout << endl;
    
    system("pause");
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.10.2018, 01:36
Ответы с готовыми решениями:

Напишите программу, которая создает поток
Напишите программу, которая создает поток. Используйте атрибуты по умолчанию. Родительский и вновь...

Разработать программу, в которой основной поток, принимает поток ввода и контролирует созданные потоки.
что-то не-то с кодом. 2 дня ломаю голову :( //#define _REENTRANT #include &lt;stdio.h&gt; #include...

Нужно создать базу данных (создать пустой бинарный файл). Через поток. Поток бинарного файла описать в виде локальной переменной внутри функции.
Совсем не понял эту тему. Нужно создать базу данных (создать пустой бинарный файл). Через поток....

Как завершить созданный поток?
Вопрос такой , при помощи класса Thread создается второй поток , он работает , все хорошо , но...

2
2019 / 607 / 220
Регистрация: 10.02.2018
Сообщений: 1,387
26.10.2018, 07:32 2
Можно как-то так попытаться.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int _nextOrder = 0;
mutex _m;
 
bool lock(int currentOrder)
{
    for (;;)
    {
        _m.lock();
 
        if (_nextOrder == currentOrder)
            break;
 
        _m.unlock();
    }
 
    return false;
}
 
void unlock(int nextOrder)
{
    _nextOrder = nextOrder;
    _m.unlock();
}
0
3269 / 2657 / 717
Регистрация: 25.03.2012
Сообщений: 9,582
Записей в блоге: 1
26.10.2018, 07:43 3
Я тебя ещё раз спрашиваю, зачем ты спамишь темами про свой этот "поток"?!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.10.2018, 07:43

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Передача аргумента в созданный поток
Здравствуйте, суть такова: Создаётся некий поток: DWORD WINAPI MyThread(LPVOID lpParam) {...

Как убить поток, созданный динамически
К примеру поток создаётся так: void MyMetod(int a, int b) { ...

Не закрывается поток созданный в другом классе
Здравствуйте, подскажите пожалуйста как грамотно отключать поток из form,. у меня даже после...

не создает еще один поток
пытаюсь создать еще один поток(четвертый,помимо 2-х форм,если это важно) вот собственно...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.