Подскажите, почему выполняется только первый поток? Как можно исправить, что бы выполнялись потоки по очереди?
#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);
...
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости