Форум программистов, компьютерный форум CyberForum.ru

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

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

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

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

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

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

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

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

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

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

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

Заранее спасибо)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.08.2012, 15:24     Создание простой многопоточной программы
Посмотрите здесь:

C++ Выполнение программы простой структуры
C++ Выполнение программы простой структуры
C++ диаграмма развертывания для простой программы
C++ Исходник простой программы по работе с 2D графикой
Проблемы с распараллеливанием(omp) простой программы C++
Работа со списками. из простой программы сделать списки C++
Разбор кода простой программы новичка C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6471 / 2246 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
18.08.2012, 15:33     Создание простой многопоточной программы #2
Добавлено через 44 секунды
Цитата Сообщение от Predlegion Посмотреть сообщение
Любые комментарии будут полезны
А вопрос-то в чем?
Mиxaил
 Аватар для Mиxaил
530 / 435 / 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/4395b2...8999bd05ec7557
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 и []()?
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
18.08.2012, 16:04     Создание простой многопоточной программы #5
Predlegion, C++11. Конкретно []() -> type { } - объявление лямбда функции.
auto variable = initializer - создает переменную variable типа initializer и инициализирует значением initializer.
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.
А можно использовать в данном случае обычную функцию?
Vourhey
Почетный модератор
6471 / 2246 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
18.08.2012, 16:17     Создание простой многопоточной программы #7
Predlegion, ты сам себе на вопрос ответил. Это функции винапи. На МСДН есть примеры, как создать потоки: http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
akk
 Аватар для akk
44 / 44 / 7
Регистрация: 28.01.2012
Сообщений: 341
28.08.2013, 17:33     Создание простой многопоточной программы #8
У меня почему-то не компилируется код Михаила.
Ошибка: thread не является элементом std.
с флагами -pthread -hpthread тоже не компилируется, в чем может быть ошибка?
Создание простой многопоточной программы
Jupiter
Каратель
Эксперт C++
6547 / 3967 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.08.2013, 19:53     Создание простой многопоточной программы #9
akk, -std=c++11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.08.2013, 20:33     Создание простой многопоточной программы
Еще ссылки по теме:

Создание простой RPG C++
Оптимизация простой программы C++
C++ Компиляция простой MPI программы C++
При компиляции простой программы - ошибки C++
C++ Рассинхрон многопоточной программы

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

Или воспользуйтесь поиском по форуму:
akk
 Аватар для akk
44 / 44 / 7
Регистрация: 28.01.2012
Сообщений: 341
28.08.2013, 20:33     Создание простой многопоточной программы #10
Jupiter, не работает, а у вас компилируется?
Yandex
Объявления
28.08.2013, 20:33     Создание простой многопоточной программы
Ответ Создать тему
Опции темы

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