Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 33, средняя оценка - 4.73
Predlegion
3 / 3 / 0
Регистрация: 21.01.2011
Сообщений: 27
#1

Создание простой многопоточной программы - C++

18.08.2012, 15:24. Просмотров 4899. Ответов 9
Метки нет (Все метки)

Здравствуйте спецы.

Никак не могу разобраться с многопоточностью.

Помогите на простом примере разобраться с этим.

Требуется написать программу, состоящую из двух потоков. В первом потоке выполняется бесконечный цикл, а во втором - выводятся числа от 1 до 100 с задержкой в 1 секунду в элемент Label.
Думаю программа очень простая, но она поможет мне разобраться со многим.

Если я не ошибаюсь(если ошибаюсь то поправьте плиз) нужно создать две функции, которые будут исполнятся в этих двух потоках( в одной бесконечный цикл а во второй счетчик). Это должно делаться с использованием специальной функции DWORD WINAPI ThreadProc, в которой и будут описаны нужные действия.

Затем нужно вызвать две функции HANDLE CreateThread, в которые передать указатели на соответствующие ThreadProc.

Любые комментарии будут полезны, только просьба не слишком усложнять.

Заранее спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.08.2012, 15:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создание простой многопоточной программы (C++):

Рассинхрон многопоточной программы - C++
Добрый вечер. Имеется многопоточная программа, работает при нажатии цифровых клавиш (прибавление) а так же при сочетании Alt+цифра...

Создание простой RPG - C++
Здравствуйте. В С++ полный 0, программирую в основном на php.Но вопрос вот в чём: вот на скрине скрин игры, и у меня вопрос: как, с помощью...

Оптимизация простой программы - C++
Суть задачи такова: программа должна вычислить сумму цифр которые делятся на a или b и цифры должны быть меньше n. Максимальное число n =...

Выполнение программы простой структуры - C++
1. Для задачи 1 определить тип заданных выражений и найти их значения. 2. Составить систему тестов и вычислить полученное выражение для...

Выполнение программы простой структуры - C++
Для задачи записать выражение, зависящее от координат точки X1 и Y1 и принимающее значение TRUE, если точка принадлежит заштрихованной...

C++ Компиляция простой MPI программы - C++
Доброго вечера, в DevC++ 5.4.2 с использованием технологии MPI, MPICH2 (Настройка компилятора MinGW GCC 4.7.2 32-bit) пытаюсь запустить...

9
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
18.08.2012, 15:33 #2
Добавлено через 44 секунды
Цитата Сообщение от Predlegion Посмотреть сообщение
Любые комментарии будут полезны
А вопрос-то в чем?
0
Mиxaил
533 / 438 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
18.08.2012, 15:50 #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// C++11
 
#include <iostream>
#include <thread>
 
int main( int argc, char **argv )
{
    auto infinityLoopOdd  = []() -> void { for( int index = 1; ; index += 2 ) std::cout << index << std::endl; };
    auto infinityLoopEven = []() -> void { for( int index = 0; ; index += 2 ) std::cout << index << std::endl; };
 
    std::thread threadFirst( infinityLoopOdd );
    std::thread threadSecond( infinityLoopEven );
 
    threadFirst.join();
    threadSecond.join();
 
    return 0;
}
Добавлено через 1 минуту
В одном потоке пускает бесконечный цикл четных положительных чисел, в другом - нечетных.

Добавлено через 14 минут
Вот результат: http://liveworkspace.org/code/4395b2742936fc370e8999bd05ec7557
2
Predlegion
3 / 3 / 0
Регистрация: 21.01.2011
Сообщений: 27
18.08.2012, 16:01  [ТС] #4
Михаил, спасибо.
А можно такое сотворить с помощью ThreadProc и CreateThread?
А то не совсем понятно как задать уникальное имя потоковой функции ThreadProc.
Имеется ввиду, что нужно сделать ThreadProc1 и ThreadProc2, которые выполняют различные действия.

Vourhey, вопрос в том как создавать многопоточные приложения, желательно с помощью функций ThreadProc и CreateThread.

Добавлено через 2 минуты
Цитата Сообщение от Mиxaил Посмотреть сообщение
Ого, спасибо

Добавлено через 6 минут
Михаил, не совсем понятно что означает:
auto infinityLoopOdd = []() ->

это видимо какой-то указатель. Что значит auto и []()?
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
18.08.2012, 16:04 #5
Predlegion, C++11. Конкретно []() -> type { } - объявление лямбда функции.
auto variable = initializer - создает переменную variable типа initializer и инициализирует значением initializer.
1
Predlegion
3 / 3 / 0
Регистрация: 21.01.2011
Сообщений: 27
18.08.2012, 16:14  [ТС] #6
Цитата Сообщение от ForEveR Посмотреть сообщение
Predlegion, C++11. Конкретно []() -> type { } - объявление лямбда функции.
auto variable = initializer - создает переменную variable типа initializer и инициализирует значением initializer.
А можно использовать в данном случае обычную функцию?
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
18.08.2012, 16:17 #7
Predlegion, ты сам себе на вопрос ответил. Это функции винапи. На МСДН есть примеры, как создать потоки: http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
1
akk
44 / 44 / 7
Регистрация: 28.01.2012
Сообщений: 341
28.08.2013, 17:33 #8
У меня почему-то не компилируется код Михаила.
Ошибка: thread не является элементом std.
с флагами -pthread -hpthread тоже не компилируется, в чем может быть ошибка?
Создание простой многопоточной программы
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.08.2013, 19:53 #9
akk, -std=c++11
0
akk
44 / 44 / 7
Регистрация: 28.01.2012
Сообщений: 341
28.08.2013, 20:33 #10
Jupiter, не работает, а у вас компилируется?
0
28.08.2013, 20:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.08.2013, 20:33
Привет! Вот еще темы с ответами:

Разбор кода простой программы новичка - C++
Народ, я вот тут только начал учиться, помогите понять ошибки. Вот код: #include &lt;iostream.h&gt; class Rabota { public: int...

Исходник простой программы по работе с 2D графикой - C++
Пришлите, пожалуйста, простой текст программы, которая создавала бы окно (не DOS) и рисовала бы в нём, скажем, синий крест на жёлтом фоне. ...

Проблемы с распараллеливанием(omp) простой программы - C++
Нужно реализовать и распараллелить простенький алгоритм: Найти минимальное число, большее заданного N, которое делится нацело на все...

диаграмма развертывания для простой программы - C++
Есть написанная программа для командной мтроки но из всех Uml не сделана диаграмма развертывания . Есть ли какой-дь софт который с помощью...


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

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

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