Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
 Аватар для Mesteriis
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637

Заголовочный файл <thread> и все что с ними связано

19.12.2015, 21:54. Показов 1674. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе время уважаемые форумчани!

Проспал((( лекцию по потока, а может и забыл а может и не помнил! Короче, есть задумка, дано:
1) некий метод который выполняется непомерно долго, это нормально, просто происходят большие расчеты.
2) пустующая консоль при этом.

Хотелось с помощью thread рисовать в консоле некие символы, а как только метод завершит работу, продолжить работы.
Начал читать про thread, но путного в интернете не нашел нечего.

Прошу вашей помощи, скорее не кодом а ссылкой на годное описания сего действия!

PS от кода не откажусь, просто проще на примере пойму! ))))
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.12.2015, 21:54
Ответы с готовыми решениями:

Не находит заголовочный файл thread (Visual Studion 2010)
Ребят помогите в чем может быть проблема?

Что такое заголовочный файл? Что такое файл исходного кода? Рассмотрите назначение каждого из них
Что такое заголовочный файл? Что такое файл исходного кода? Рассмотрите назначение каждого из них пожалуйста.

Строки и все что сними связано
Здравствуйте, дорогие форумчане, нужна ваша помощь. Решая задачи я очень сильно запутался в функциях\объектах. Прошу помочь разобраться...

10
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
20.12.2015, 00:06
Ну вот дополнительный thread пусть и считает, а для определения того, что расчёт закончен используй флаг, который поток установит перед завершением. Примерно так.
0
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
20.12.2015, 00:10
Годная книга:
Параллельное программирование на С++ в действии. Практика разработки многопоточных программ
Автор: Энтони Уильямс
Год: 2012
Издательство: ДМК Пресс
ISBN: 978-5-94074-448-1
0
 Аватар для DiffEreD
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
20.12.2015, 00:34
Вот тут неплохой цикл статтей: Добро пожаловать в параллельный мир
0
 Аватар для Mesteriis
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
20.12.2015, 01:20  [ТС]
nmcf, DiffEreD, Perfilov, Спасибо друзья, уже печатаю книжку для чтения на белом троне))) буду купить мануалы)

Добавлено через 44 минуты
Еще раз спасибо за статьи
Решил проблему так (вдруг кому понадобится):
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
#include <iostream>
#include <thread>
#include <vector>
 
using namespace std;
 
int Global_exit=0;
vector<int> arr;
 
void DrawWork()
{
    for (int i=0; ;++i)
    {
        cout << "\r In progress... "<< "|";
        cout << "\r In progress... "<< "/";
        cout << "\r In progress... "<< "-";
        cout << "\r In progress... "<< "";
        if (Global_exit==1)  break;
    }
}
 
int foo(int iteration, int time)
{
    arr.clear();
    for (int i=0; i<iteration; ++i)
    {
        sleep(time);
        arr.push_back(i);
    }
 
    return Global_exit=1;
}
 
int main()
{
    system("clear");
    thread th1(foo, 5, 5);
    DrawWork();
    th1.join();
    cout << "\r In progress... DONE\n";
    for (unsigned long i=0; i<arr.size();++i)
    {
        cout << arr[i] << "  ";
    }
    cout << endl;
    return EXIT_SUCCESS;
}
PS Если что не так приму критику!
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
20.12.2015, 09:45
Лучший ответ Сообщение было отмечено Mesteriis как решение

Решение

Ты не контролируешь доступ к разделяемому объекту. И паузы не помешают. Вот так должно быть:
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
#include <iostream>
#include <thread>
#include <vector>
#include <chrono>
#include <atomic>
 
using namespace std;
 
std::atomic<bool> ready(false);
vector<int> arr;
 
void DrawWork()
{
    for (; !ready;)
    {
        cout << "\r In progress... "<< "|";
        std::this_thread::sleep_for (std::chrono::milliseconds(200));
        cout << "\r In progress... "<< "/";
        std::this_thread::sleep_for (std::chrono::milliseconds(200));
        cout << "\r In progress... "<< "-";
        std::this_thread::sleep_for (std::chrono::milliseconds(200));
        cout << "\r In progress... "<< "\\";
        std::this_thread::sleep_for (std::chrono::milliseconds(200));
    }
}
 
void foo(int iteration, int time)
{
    arr.clear();
    for (int i=0; i<iteration; ++i)
    {
        arr.push_back(i);
        std::this_thread::sleep_for (std::chrono::milliseconds(time));
    }
    ready = true;
}
 
int main()
{
    system("clear");
    thread th1(foo, 5, 500);
    DrawWork();
    th1.join();
 
    cout << "\r In progress... DONE\n";
 
    for (size_t i=0; i<arr.size();++i)
    {
        cout << arr[i] << "  ";
    }
    cout << endl;
    return EXIT_SUCCESS;
}
1
 Аватар для Mesteriis
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
20.12.2015, 13:43  [ТС]
nmcf, Если позволишь несколько вопросов:
1й.
Цитата Сообщение от nmcf Посмотреть сообщение
C++
1
atomic<bool> ready(false);
эм, это что за тип данных, дело в том что std::atomic вообще не представляю что это, где то читал что это библиотека защищенных типов данных, но что это вот хоть убей не пойму, например чем отличается записи bool ready; от std::atomic<bool> ready(false);?
2й.
Цитата Сообщение от nmcf Посмотреть сообщение
C++
1
for (; !ready;)
первый раз вижу такую запись цикла, это из с++14?
3й.
Цитата Сообщение от nmcf Посмотреть сообщение
C++
1
std::this_thread::sleep_for
анологичный первому, я понимаю что делает эта строчка кода, но чем бы она отличалась от обычного sleep(), я не про то что слип умеет работать только с секундами, а принципе!
4й.
Цитата Сообщение от nmcf Посмотреть сообщение
C++
1
2
3
std::atomic<bool> ready(false);
...
ready = true;
нет ли другого способа обмениваться данными из потоков кроме как использовать глобальные переменные?

Добавлено через 43 секунды
и еще
Цитата Сообщение от nmcf Посмотреть сообщение
C++
1
size_t
это аналог unsigned long long?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
20.12.2015, 13:51
Ну atomic - это такая штука, которая как бы совмещена с мьютексом. Т. е. гарантируется, что при доступе из разных потоков не будет проблем.

Такая запись цикла была всегда, не обязательно все три секции задействовать, если оставить все секции пустыми - будет бесконечный цикл.

Что такое sleep(), я не понял. В стандарте нет такого, а есть как я показал.

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

Добавлено через 2 минуты
size_t просто тип, который используется в стандартных библиотеках. От реализации зависит, чему он будет соответствовать. Вообще у vector есть size_type.
1
 Аватар для Mesteriis
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
20.12.2015, 13:52  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
Что такое sleep(), я не понял.
в хедере unistd.h
C++
1
2
unsigned int
     sleep(unsigned int) __DARWIN_ALIAS_C(sleep);
тушит выполнения на n секунд.
А так мерси) все понятно!
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
20.12.2015, 13:55
unistd нет в стандарте C++, это, наверное, из Linux что-то. Надо читать описание, подходит она для многопоточного использования или нет. Лучше использовать стандартные.
0
 Аватар для Mesteriis
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
20.12.2015, 14:07  [ТС]
nmcf, спасибо за исчерпывающие комментарии )

Добавлено через 5 минут
Цитата Сообщение от nmcf Посмотреть сообщение
это, наверное, из Linux что-то.
из UNIX, сейчас поковырял инеты и ее саму, короче написано что это либа для общения с системой, своего рода API для стандартных действий, там создать директорию, удалить, что то скопировать, и все в этом духе! Есть "совместимость" с thread? но пишут что лучше не использовать!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.12.2015, 14:07
Помогаю со студенческими работами здесь

потоки и всё что с ними связано (thread). Не компилица(
собственно сабж в качестве примера код #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;pthread.h&gt; #include...

IP Камеры и все, что с ними связано
Всем привет! В общем на работе, решили поставить IP Камеры, внутреннего наблюдения. Денег тратить не хотят и по этому, решили...

можно-ли с помощью загрузочной дискеты скопировать из винды файлы sam , syskey и всё что с ними связано
наверняка создал тему не там(я тут первый раз)но всё-же,нужно узнать пароль админа на компе запускается комп только с HDD и...

все что связано statusbar
помогите знатоки использую такую функцию вроде работает function FileSize(fileName : wideString) : Int64; var sr :...

ComboBox и все что с ним связано...
Есть Combobox который необходимо заполнить данными из txt файла. Вот что у меня получилось, точнее не получилось... Dim file As...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru