Если смогу сделать, может и утечёт, но далеко не сразу, гыгы За это время я смогу его изрядно побесить, как он и те, кто использовали его прогу там, где это было запрещено правилами, бесили меня --- Сообщение объединено, 13 сен 2023 --- Деньги тут не главное, главное смогу ли я написать более быстрый и умный алгоритм, и одолеть его прогу
1. выделить много памяти через VirtualAlloc, самому помечать блоки занятыми / свободными. 2. использовать createfiber
У меня есть идея сделать что-то подобное, но менее радикальное потому, что если я ещё больше буду использовать памяти, то винда может просто не выдержать. Я и так сомневаюсь, что если я всё же смогу доделать прогу и начну тестить её по полной, выдержит ли винда Мне не нужно контролировать выполнение нитей. Проблема в том, что CreateThread занимает очень много времени в рекурсии. Но как от неё избавиться?
Сделай пул потоков раза в два больше, чем ядер на машине. То, что у тебя было CreateThread теперь будет процедурой которая ищет свободный поток в пуле и если находит - пробуждает его передав задачу на исполнение. Если свободных потоков не находится - то уже текущий поток засыпает вешая своё пробуждение на событие изменения состояния пула после чего повторяет попытку захвата потока и т.д. P.S. Правда тут вроде бы возможен вариант бутылочного горлышка, когда реально пахать будет один поток, а остальные будут ждать освобождения свободного слота. Это опять таки зависит от алгоритма. Если там рекурсия, то можно выродиться в такой случай.