Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
 Аватар для Gr1f0nn
244 / 164 / 133
Регистрация: 30.09.2012
Сообщений: 690

Как правильно реализовывается многопоточность

05.12.2014, 16:33. Показов 2748. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Стоит задача создать несколько потоков, которые будут выполнять какие-то действия.
У Шлее (профессиональное программирование на C++) по этой теме написано крайне мало(на мой взгляд), буквально 30 страниц.

Не по теме:

Возможно книга рассчитана не на новичков (судя по названию, то скорее всего так оно и есть ^_^)


В статьях по этой теме тоже не совсем все понятно расписано (например, тут: http://habrahabr.ru/post/182610/).

Не по теме:

Либо это действительно не так сложно сделать, либо это слишком сложно сделать и поэтому необходимо читать книги конкретно про многопоточность ^_^



Теперь более конкретные вопросы:
1. В книге написано, что создавать свой поток надо так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
class Mythread : public QThread {
public:
    void run() {
         // some code
    }
}
 
int main() {
    Mythread thread;
    thread.start();
    return 0;
}
В статье, что так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <thread>
 
void threadFunction()
{
     // do smth
}
 
int main()
{
     std::thread thr(threadFunction);
     thr.join();
     return 0;
}
Если ли разница и как правильней? Особенно интересует случай, в котором я создаю приложение с визуальным интерфейсом.

2.
Допустим, у меня есть класс:
C++
1
2
3
4
5
6
7
8
class A {
private:
    // some code
public:
    //some code
    void add(int);
    int get_int();
}
и я хочу, чтобы эти 2 метода выполнялись в своих потоках. Если взять за основу реализацию, показанную в книге Шлее, то в методе run() мне надо написать вызов нужного мне метода или как-то по-другому?
Если же я хочу сделать это также, как написано в статье, то как мне передать параметр в функцию, которая должна выполняться в потоке? Или я могу написать так:
C++
1
 std::thread thr(add(int));
?



Заранее большое спасибо за помощь!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.12.2014, 16:33
Ответы с готовыми решениями:

Почему не реализовывается список?
Пытаюсь для начала создать список из 2-ух элементов, но не получается :( #include &quot;stdafx.h&quot; #include...

Многопоточность, как правильно передавать параметры?
#include &quot;lcbot.h&quot; #include &quot;game.h&quot; #include &lt;windows.h&gt; #include &lt;process.h&gt; #include &lt;stdio.h&gt; game Game; ...

Как правильно организовать многопоточность?
Всем привет! Если кратко Мне нужно организовать выполнение одной большой не цикловой задачи в отдельном потоке. При этом нужно 1....

27
 Аватар для Gr1f0nn
244 / 164 / 133
Регистрация: 30.09.2012
Сообщений: 690
05.12.2014, 22:53  [ТС]
Студворк — интернет-сервис помощи студентам
DrOffset, все убрал, а внутри галочки забыл убрать лишние ^_^
В общем я установил все, снова попробовал и снова тот же результат:
ошибка: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
#error This file requires compiler and library support for the \
^
Может мне как-то вручную надо выставить 11 стандарт(где-то на форуме как раз говорили об этом) ?

На всякий случай сам код:
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <thread>       <- ошибка
using namespace std;
 
int main()
{
    cout << "Hello World!" << endl;
    return 0;
}
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
05.12.2014, 22:56
Цитата Сообщение от Gr1f0nn Посмотреть сообщение
Может мне как-то вручную надо выставить 11 стандарт?
Так я же об этом и говорил. Надо добавить эту опцию в pro-файл.
Вот так:
QMAKE_CXXFLAGS += -std=c++11
1
 Аватар для Gr1f0nn
244 / 164 / 133
Регистрация: 30.09.2012
Сообщений: 690
05.12.2014, 23:00  [ТС]
DrOffset, Спасибо большое! Все работает!
Теперь буду с примерами разбираться.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
05.12.2014, 23:25
Цитата Сообщение от DrOffset Посмотреть сообщение
Надо добавить эту опцию в pro-файл.
Только, имхо, лучше так:
CONFIG += c++11
Вариант с QMAKE_CXXFLAGS не будет работать, скажем, для VS компилятора.
0
05.12.2014, 23:41

Не по теме:

Цитата Сообщение от DrOffset Посмотреть сообщение
Первая книга тоже есть на русском (правда в отвратительном переплете). Русское название: "Параллельное программирование на С++ в действии. Практика разработки многопоточных программ"
К сожалению, в данной области английский язык более богат и некоторые вещи нельзя перевести без искажения смысла. Читать её стоит непременно на английском.

Тоже хочу заказать себе бумажную версию. Но 2500+ как то многовато :(

0
05.12.2014, 23:45

Не по теме:

Цитата Сообщение от MrGluck Посмотреть сообщение
Читать её стоит непременно на английском.
Именно об этом же я сказал коллеге Croessmah чуть выше.
У меня у самого эта книга на английском, я ее заказывал еще когда курс рубля не был таким диким.
Но русский вариант ужасен в первую очередь своим форматом издания (они уменьшили размеры книги) и переплетом. Перевод тоже не очень, но он не настолько плох, насколько сам формат издания.

0
06.12.2014, 05:09

Не по теме:

Цитата Сообщение от DrOffset Посмотреть сообщение
Крайне рекомендую заказывать оригинал в таком случае. Хотя конечно с нынешним курсом это влетит в копейку.
Не думаю, что потяну англоязычный вариант, хотя может и потяну со словариком :D

0
 Аватар для Pancir
59 / 46 / 11
Регистрация: 16.09.2014
Сообщений: 124
06.12.2014, 05:25
ИМХО, оч не плохая лекция по теме.
http://www.lektorium.tv/course/23050
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.12.2014, 05:25
Помогаю со студенческими работами здесь

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

как реализовывается
point (p,a,b) // р - модуль x:=0; while (x&lt;p) w:=(x^3+ax+b) mod p // w - это у^2 if (w - целое значение квадратного корня Zр)...

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

Как реализовывается взаимосвязь клиента и программы на сервере
Здравствуйте! Помогите пожалуйста разобраться в web программировании. Я хочу сделать программу сервер и клиент. Сервер - ...

Не правильно работает многопоточность
Прошу помочь с проблемой, очень долго не могу разобраться, приложение - гонки машин(picturebox) При нажатии на кнопку button1 - 3 машины...


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

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru