Ограничения только в количестве свободной памяти.
На 10 потоков никак не может стоять ограничение для процесса, т.к. в одном из svchost.exe около 80 потоков, в winlogon.exe штук 30.
Следующий кусочек кода создает в моих системах около 2.3к потоков в своем процессе до тех пор, пока CreateThread не возвращает ERROR_NOT_ENOUGH_MEMORY:
Код:
#include <windows.h>
#pragma comment(linker, "/ENTRY:Entry")
#define _LOG_FILE_ "out.log"
HANDLE hFile = NULL;
VOID WINAPI Log(PCHAR msg,...)
{
char buff[1024] = "\0";
va_list mylist;
DWORD dwWrited = 0;
va_start(mylist, msg);
wvsprintf(buff, msg, mylist);
va_end(mylist);
if(!hFile || (hFile == INVALID_HANDLE_VALUE))
hFile = CreateFile(_LOG_FILE_, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL, 0);
if(hFile != INVALID_HANDLE_VALUE)
WriteFile(hFile, buff, strlen(buff), &dwWrited, 0);
}
ULONG WINAPI Thread(PVOID pParam)
{
Log("Create: id=%i\r\n", GetCurrentThreadId());
Sleep(-1);
return 1;
}
VOID WINAPI Entry()
{
int i = 0;
for(i = 0; i < 10000; i++){
if(!CreateThread(NULL, 0, Thread, NULL, 0, NULL)) {
Log("CreateThread error %i\r\n", GetLastError());
break;
}
}
MessageBox(0, 0, 0, 0);
ExitProcess(0);
}
Давно качал "патч для винды", который якобы давал возможность создавать аж до 50! :D потоков, оказалась обычная малваря.
|