Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 30.09.2018
Сообщений: 8

Реализовать цикличный вывод строки (10, 100, 1000 циклов) в нескольких потоках (2, 4, 8, 16)

15.10.2019, 06:48. Показов 1683. Ответов 8

Студворк — интернет-сервис помощи студентам
Необходимо реализовать вывод строки в нескольких потоках (2, 4, 8, 16 потоков) с помощью функций WinAPI. При этом синхронизацию использовать не нужно, то есть должен получится смешанный вывод. Подскажите, пожалуйста, как правильно реализовать распараллеливание вывода на несколько потоков.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.10.2019, 06:48
Ответы с готовыми решениями:

Сгенерировать и вывести на экран массив с 10 случайных чисел в диапазоне от -100 до 100. Цикличный сдвиг массива влево на 1 и вывод на экран
Помогите написать программку в Паскале, что сгенерирует и выведет на экран массив с 10 случайных чисел в диапазоне от -100 до 100. Делает...

Вывод в Excel значения в пределах от 100 до 1000 с шагом 100 в столбец
Написать VBS-скрипт, выводящий в Excel значения в пределах от 100 до 1000 с шагом 100 в столбец. Вот пока до чего додумался, но это...

Вывод в консоль чисел от 1 до 1000 не используя циклов и условных операторов
Условие было такое Сумеете ли вы вывести числа от 1 до 1000 средствами языка C/C++, не используя циклов и условных операторов? (Не стоит...

8
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
15.10.2019, 09:17
Цитата Сообщение от Stashon Посмотреть сообщение
Необходимо реализовать вывод строки в нескольких потоках (2, 4, 8, 16 потоков) с помощью функций WinAPI. При этом синхронизацию использовать не нужно, то есть должен получится смешанный вывод. Подскажите, пожалуйста, как правильно реализовать распараллеливание вывода на несколько потоков.
Что именно не получается?
0
0 / 0 / 0
Регистрация: 30.09.2018
Сообщений: 8
15.10.2019, 17:58  [ТС]
oleg-m1973, У меня сейчас вот такой код, но вывод совсем не тот, который должен быть. Не могу понять, как правильно распределить строку между потоками.
typedef struct {
std::string info;
unsigned int m_number;
unsigned m_cycles;
unsigned m_currentThread;
}data;

unsigned int __stdcall Func(void* data) {
data* real = (data*)data;
std::cout << "Current thread ID: " << GetCurrentThreadId() << std::endl;

for (int j = (real->m_currentThread - 1) * real->m_cycles / real->m_number;j< real->m_currentThread * real->m_cycles / real->m_number;j++) {
for (int i = 0;i < real->info.size();++i) {
std::cout << real->info[i] << " ";
}
}
return 0;
}

int main(int argc, char* argv[]) {
int threadsNumber;
std::string str;
std::getline(std::cin, str);
std::cout << "Enter the number of threads:\n";
std::cin >> threadsNumber;
int cycles;
std::cout << "Enter the number of cycles:\n";
std::cin >> cycles;
std::vector<HANDLE> threads;
HANDLE tmp;
data* args = new data;
args->info = str;
args->m_number = threadsNumber;
args->m_cycles = cycles;
for (int i = 1;i <= threadsNumber;++i) {
args->m_currentThread =i;
tmp =(HANDLE)_beginthreadex(0, 0, &Func, args, 0,0);
Sleep(1000L);
threads.push_back(tmp);
}
WaitForMultipleObjects(threads.size(), &threads.front(), TRUE, INFINITE);

getchar();
return 0;
}
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
15.10.2019, 18:02
Цитата Сообщение от Stashon Посмотреть сообщение
У меня сейчас вот такой код, но вывод совсем не тот, который должен быть. Не могу понять, как правильно распределить строку между потоками.
Покажи, что выводится на экран
0
0 / 0 / 0
Регистрация: 30.09.2018
Сообщений: 8
15.10.2019, 18:10  [ТС]
oleg-m1973,
Миниатюры
Реализовать цикличный вывод строки (10, 100, 1000 циклов) в нескольких потоках (2, 4, 8, 16)  
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
15.10.2019, 18:13
Цитата Сообщение от Stashon Посмотреть сообщение
for (int i = 0;i < real->info.size();++i) {
std::cout << real->info[i] << " ";
Здесь ты вставляешь пробелы между буквами.
Сделай без цикла std::cout << real->info << std::endl;
0
0 / 0 / 0
Регистрация: 30.09.2018
Сообщений: 8
15.10.2019, 18:33  [ТС]
oleg-m1973, Теперь выводятся строчки, но мне нужно, чтобы вывод был посимвольный, и в результате данные между потоками путаются, то есть будет выводится смешанный текст.
Миниатюры
Реализовать цикличный вывод строки (10, 100, 1000 циклов) в нескольких потоках (2, 4, 8, 16)  
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
15.10.2019, 18:56
Лучший ответ Сообщение было отмечено Stashon как решение

Решение

Цитата Сообщение от Stashon Посмотреть сообщение
oleg-m1973, Теперь выводятся строчки, но мне нужно, чтобы вывод был посимвольный, и в результате данные между потоками путаются, то есть будет выводится смешанный текст.
Он у тебя и так смешается. Убери задержку при старте потоков - запускай сразу все.

Добавлено через 48 секунд
Ну уж если приспичило
C++
1
2
3
4
for (int i = 0;i < real->info.size();++i)
     std::cout << real->info[i];
 
std::cout << std::endl;
1
0 / 0 / 0
Регистрация: 30.09.2018
Сообщений: 8
15.10.2019, 19:24  [ТС]
oleg-m1973, Спасибо большое!! Действительно, убрал задержку и вывод получился такой, как надо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.10.2019, 19:24
Помогаю со студенческими работами здесь

Синхронизация работы циклов в разных потоках
Помогите советами... как синхронизировать циклы в разных потоках. Есть основной метод в &quot;главном потоке&quot; в котором крутится...

Записать 1000 случайных чисел в диапазоне (-100, 100)
Записать 1000 случайных чисел в диапазоне (-100,100) в файл а.txt . В файл otr.txt вывести отрицательные числа . В файл plus.txt...

Вывести числа от 100 до 1000 с шагом 100.
Привет. Помогите. Нужно составить программу на языке паскаль, используя опереатор цикла. Нужно написать программу, которая выводит на экран...

Цикличный вывод элементов
Здравствуйте. Подскажите пожалуйста, как правильно сделать, что бы процедура выполнялась безконечно. То есть 1div через 5 секунд 2div через...

Цикличный вывод данных с бд по указанным маскам
Здравствуйте друзья, всех с новым годом. Помогите с задачей не нашел ответа самостоятельно: Есть таблица с номерами - от туда нужно...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru