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

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

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

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

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

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

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

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

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

Заранее спасибо)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6468 / 2243 / 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
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 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
Почетный модератор
6468 / 2243 / 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++
6543 / 3963 / 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++

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

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

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