Есть структура, допустим
typedef struct {
String a,b;
} ThreadData;
В структуре имеются типы: bool, String, int, vector(String), vector(int).
Создаю поток так:
for (int h = 0; h < count; h++) {
//count это количество создаваемых потоков
ThreadData *td = new ThreadData;
/*заполняю структуру*/
td->NumberOfThread = h + 1;
DWORD id;
HANDLE thread = CreateThread(NULL, 0U, MainThread, (LPVOID)td, THREAD_PRIORITY_NORMAL, &id);
CloseHandle(thread);
};
Функция потока:
DWORD WINAPI MainThread(LPVOID lpParameter) {
ThreadData * td = (ThreadData*)lpParameter;
/*какая-то операция с данными потоками*/
delete td;
ExitThread(0u);
return 0;
}
Вместо CreateThread пробовал _beginthread, результат тот же, а именно: при создании 1400 потоков все работает хорошо, если создавать больше 1500, то софт крэшится. Бывает успевает вылезти ошибка "out of memory". при работе в 1400 потоков в диспетчере задач кушается около 100 МБ.
Личные замечания:
Если просто создавать структуры в цикле через new, не создавая новый поток, то все работает, можно создать и 100к экземпляров структуры.
Если не создавать структуру, а поднимать 100к потоков, не передавая в них ничего, то тоже потоки создаются и работают.
Если создавать эксземпляры структур и создавать потоки, но в поток ничего не передавать и в потоке ничего не создавать, то софт крэшится.
Подскажите в чем причина и как с этим бороться?