Подскажите, почему выполняется только первый поток? Как можно исправить, что бы выполнялись потоки по очереди?
#include "stdafx.h"
#include <conio.h>
#include <iostream>
#include <windows.h>
using namespace std;
struct ARGS {
int a;
int b;
};
DWORD WINAPI ThreadFunctionOne(LPVOID pArgs_)
{
ARGS *pArgs = (ARGS*)pArgs_;
int s = 0;
while (pArgs->a <= pArgs->b) s += pArgs->b--;
cout << "Сумма равна = " << s << endl;
return 0;
}
DWORD WINAPI ThreadFunctionTwo(LPVOID pArgs_)
{
ARGS *pArgs = (ARGS*)pArgs_;
int p = 1;
while (pArgs->a <= pArgs->b) p *= pArgs->b--;
cout << "Произведение равно = " << p << endl;
return 0;
}
int main()
{
setlocale(0, "");
int a, b;
cout << "Введите нижнюю границу диапазона L: ";
cin >> a;
cout << "Введите верхнюю границу диапазона U: ";
cin >> b;
ARGS args = { a, b };
DWORD idThread;
HANDLE h1, h2;
// Создается два потока в приостановленном состоянии
h1 = CreateThread(NULL, 0, ThreadFunctionOne, &args, CREATE_SUSPENDED, &idThread);
h2 = CreateThread(NULL, 0, ThreadFunctionTwo, &args, CREATE_SUSPENDED, &idThread);
ResumeThread(h1);
WaitForSingleObject(h1, 1000);
ResumeThread(h2);
_getch();
return 0;
}
Потоки выполняются по очереди как минимум потому, что у Вас стоит вызов WaitForSingleObject
, который не завершится, пока не завершится поток h1
.
Самый простой вариант решить проблему - отпустить оба потока через ResumeThread
и вызвать WaitForMultipleObjects
для обоих этих потоков с поднятым флагом bWaitAll
...
HANDLE h[2];
// Создается два потока в приостановленном состоянии
h[0] = CreateThread(NULL, 0, ThreadFunctionOne, &args, CREATE_SUSPENDED, &idThread);
h[1] = CreateThread(NULL, 0, ThreadFunctionTwo, &args, CREATE_SUSPENDED, &idThread);
ResumeThread(h[0]);
ResumeThread(h[1]);
WaitForMultipleObjects(2, h, TRUE, 1000);
...
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Недавно начал изучать C++, столкнулся со странной конструкцией условного оператора и не могу понять что он с чем сравнивает
У меня есть класс основного окна MainWindowС него я запускаю (допустим, при авторизации) модальное окно авторизации с полями "Логин", "Пароль" (lineLogin,...
Всем добрый деньСтандартный конструктор копирования в классе выглядит так: SomeClass(const SomeClass &obj) Как я понимаю, const отвечают за то, что в процессе...