Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 33, средняя оценка - 4.73
Predlegion
3 / 3 / 1
Регистрация: 21.01.2011
Сообщений: 27
#1

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

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

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

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

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

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

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

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

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

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

Создание простой RPG
Здравствуйте. В С++ полный 0, программирую в основном на php.Но вопрос вот в...

Оптимизация простой программы
Суть задачи такова: программа должна вычислить сумму цифр которые делятся на a...

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

C++ Компиляция простой MPI программы
Доброго вечера, в DevC++ 5.4.2 с использованием технологии MPI, MPICH2...

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

9
Vourhey
Почетный модератор
6490 / 2264 / 187
Регистрация: 29.07.2006
Сообщений: 12,534
18.08.2012, 15:33 #2
Добавлено через 44 секунды
Цитата Сообщение от Predlegion Посмотреть сообщение
Любые комментарии будут полезны
А вопрос-то в чем?
0
Mиxaил
534 / 439 / 162
Регистрация: 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 / 1
Регистрация: 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
В астрале
Эксперт С++
7994 / 4753 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
18.08.2012, 16:04 #5
Predlegion, C++11. Конкретно []() -> type { } - объявление лямбда функции.
auto variable = initializer - создает переменную variable типа initializer и инициализирует значением initializer.
1
Predlegion
3 / 3 / 1
Регистрация: 21.01.2011
Сообщений: 27
18.08.2012, 16:14  [ТС] #6
Цитата Сообщение от ForEveR Посмотреть сообщение
Predlegion, C++11. Конкретно []() -> type { } - объявление лямбда функции.
auto variable = initializer - создает переменную variable типа initializer и инициализирует значением initializer.
А можно использовать в данном случае обычную функцию?
0
Vourhey
Почетный модератор
6490 / 2264 / 187
Регистрация: 29.07.2006
Сообщений: 12,534
18.08.2012, 16:17 #7
Predlegion, ты сам себе на вопрос ответил. Это функции винапи. На МСДН есть примеры, как создать потоки: http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
1
akk
44 / 44 / 17
Регистрация: 28.01.2012
Сообщений: 341
28.08.2013, 17:33 #8
У меня почему-то не компилируется код Михаила.
Ошибка: thread не является элементом std.
с флагами -pthread -hpthread тоже не компилируется, в чем может быть ошибка?
Создание простой многопоточной программы
0
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.08.2013, 19:53 #9
akk, -std=c++11
0
akk
44 / 44 / 17
Регистрация: 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
Привет! Вот еще темы с решениями:

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

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

Проблемы с распараллеливанием(omp) простой программы
Нужно реализовать и распараллелить простенький алгоритм: Найти минимальное...

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


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

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

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