Q:

Не записывается результат после возврата из функции

Я делаю лабораторную работу. Задача - распараллелить вычисление интеграла на 4 потока. 
Проблема возникла с результатом работы функции DWORD WINAPI ThreadProc(void *d). Результат записывается в указатель. Внутри функции он есть, и в указатель записывается, но вне функции его уже нет. В чем тут ошибка?
#include "pch.h"
#include <iostream>
#include <windows.h>
#include <math.h>
#include <thread>

#define NUMPOINT 10000000
using namespace std;

struct Integral {
    double a = 1;
    double b = 2;
    double value = 0;
};

DWORD WINAPI ThreadProc(void *d){
    double step = 0, borders = 0, curX = 0, result = 0;

    Integral *data = (Integral*)d;
    step = (data->b - data->a) / NUMPOINT;
    borders = (cos(data->a) + cos(data->b))/2;
    curX = data->a;

    while(curX <= data->b) {
        curX += step;
        result += cos(curX);
    }
    result = step * (result + borders);
    data->value = result;
    return 0;
}

int main(void)
{
    double a = 1, b = 2;
    double value = 0;
    SYSTEM_INFO siSysInfo;
    GetSystemInfo(&siSysInfo);
    int cpuCount = siSysInfo.dwNumberOfProcessors;
    HANDLE *hThreads = new HANDLE[cpuCount];
    Integral *integrals = new Integral[cpuCount];
    double range = (b - a) / cpuCount;

    for (int i = 0; i < cpuCount; i++)
    {
        integrals[i].a = i * range + a;
        integrals[i].b = i * range + range + a;
        CreateThread(NULL, 0, &ThreadProc, &integrals[i], 0, NULL);
    }
    WaitForMultipleObjects(cpuCount, hThreads, TRUE, INFINITE);

    for (int i = 0; i < cpuCount; i++) {
        //value += integrals[i].value;
        cout << integrals[i].value << endl;
    }
    system("pause");
    return 0;
}

A:

Значение, возвращаемое CreateThread (дескриптор созданного потока), никак не используется, массив hThreads содержит мусор. Соответственно WaitForMultipleObjects не ожидает завершения потоков (возвращаемое значение тоже следует проверять). Дескрипторы потоков затем необходимо освобождать вызовом CloseHandle (и, опять же, проверять возвращаемое значение).

