Thread creation error недостаточно памяти для обработки команды

Developing.ru Как бороться с “thread creation error: Недостаточно памяти.. Мастера подскажите, как бороться с “thread creation error: Недостаточно памяти для обработки команды”, говорит, что, мол, мало памяти, хотя под стек выделено 256M , на машине стоит 512М, в диспетчере задач приложение показывает, что для приложения выделено около 5M. Пишу на Delphi 7 под WinXP. […]

Содержание

  1. Developing.ru
  2. Как бороться с “thread creation error: Недостаточно памяти..
  3. Как исправить ошибку «Недостаточно памяти для обработки команды» в Windows?
  4. Внесение изменений в системный реестр
  5. Переустановка драйвера видеокарты
  6. Удаление файлов временной папки

Developing.ru

Как бороться с “thread creation error: Недостаточно памяти..

Мастера подскажите, как бороться с “thread creation error: Недостаточно памяти для обработки команды”, говорит, что, мол, мало памяти, хотя под стек выделено 256M <$M 16384,268435456>, на машине стоит 512М, в диспетчере задач приложение показывает, что для приложения выделено около 5M. Пишу на Delphi 7 под WinXP.
Может, кто сталкивался с такой бедой, из каких соображений принимается решение, что не хватает памяти. До того как в проге было мало элементов (меньше сотни кнопок, меток и т.д.) такое сообщение не выскакивало, сейчас их несколько сотен, такое сообщение выскакивает, после того, как вызываю play_sound для проигрывания wav файла, но ф-н sndPlaySound все время выдает FALSE, хотя перенес этот модуль из старого проекта там все работало, а после этого еще раз play_sound но для пробирования тона, процесс (Thread) созданный sndPlaySound так и остается, а звука нет. Причем если вызывать sndPlaySound с тем же именем файла, но указанным как константа – звук есть, если же переменная (PChar) – звука нет.

Содержание ComboBox’ов (ItemIndex = -1 если задал имя файла ):
нет
100 Гц, 1 гудок
100 Гц, 2 гудка
200 Гц, 1 гудок
200 Гц, 2 гудка
300 Гц, 1 гудок
300 Гц, 2 гудка
500 Гц, 1 гудок
500 Гц, 2 гудка
700 Гц, 1 гудок
700 Гц, 2 гудка
1000 Гц, 1 гудок
1000 Гц, 2 гудка
1500 Гц, 1 гудок
1500 Гц, 2 гудка
2000 Гц, 1 гудок
2000 Гц, 2 гудка

type
TPlayToneThread = class(TThread) // Поток проигрывания тона
private
Frequency: integer; // Частота тона, Гц
Duration: integer; // Длительность выдачи тона, мс
Count: integer; // Кол-во выдаваемых тонов
protected
procedure Execute; override; // Исполняемая часть
end;

Источник

Как исправить ошибку «Недостаточно памяти для обработки команды» в Windows?

Ошибка «Недостаточно памяти для обработки команды» встречается на серверах Windows и возникает при неправильно установленном значении реестра, а также после сброса или переустановки.

Для ее решения Майкрософт рекомендует изменить значение в определенном разделе реестра. Если проблема сохраняется, нет другого выбора, кроме как выполнить восстановление системы.

Внесение изменений в системный реестр

В большинстве случаев устранить проблему с недостаточно выделенной памятью для обработки команды можно путем использования официального решения. Для его применения требуется доступ администратора. Нужно внести изменения в раздел. Если его нет, создадим вручную.

Примечание: Параметр «IRPStackSize» нужно поменять на том компьютере, к файлам которого мы обращаемся.

Поскольку будем вносить правки в системный реестр, рекомендуется создать резервную копию. Для этого разверните меню Файл, щелкните на Экспорт и выберите папку для сохранения копии.

Откройте Редактор реестра командой regedit из окна «Выполнить» (Win + R).

Перейдите по пути к разделу:

Найдите запись IRPStackSize. Если ее не существует, щелкните в правой части окна на пустое пространство, выберите Создать – Параметр DWORD (32 бита).

Установите имя нового параметра «IRPStackSize», щелкните правой кнопкой мыши на него и выберите «Изменить».

В поле значение установите большее число и нажмите на «OK». Значения находятся в пределах от 0x1 до 0xC. Они эквивалентны от 1 до 12 в десятичной системе исчисления.

После внесения требуемых изменений перезагрузите компьютер и проверьте, исправлена ли ошибка. Если она остается, увеличивайте значение до тех пор, пока не будет исправлена.

Переустановка драйвера видеокарты

Если ошибка возникает при запуске игры, возможно, что драйвер видеокарты поврежден или устарел. Для решения его нужно полностью удалить перед установкой нового, поэтому потребуется утилита DDU (Display Driver Uninstaller). Загрузите утилиту с официального сайта.

После установки перезапустите компьютер в безопасном режиме. Если используете Windows 10, откройте меню Пуск, кликните на кнопку Питания и, удерживая клавишу Shift, нажмите на Перезагрузку.

В среде восстановления перейдите по пути Поиск и устранение неисправностей – Дополнительные параметры – Параметры загрузки, затем нажмите на F4, чтобы загрузить систему в безопасном режиме.

Запустите DDU, укажите графический процессор и выберите первый вариант «Удалить и перезагрузить». Приложение автоматически удалит текущие драйвера, затем перезагрузит компьютер.

Запустите приложение GeForce Experience, откройте вкладку «Драйверы» и скачайте последнюю версию.

После обновления перезапустите ПК. Проверьте, исправлена ли ошибка. Если видите, что для обработки команды по-прежнему недостаточно ресурсов памяти перейдите к следующему способу.

Также обновить драйвер можно путем загрузки из сайта NVIDIA или AMD и последующего запуска загруженного файла.

Удаление файлов временной папки

Если продолжаете наблюдать, что недостаточно требуемой памяти для обработки этой команды, попробуйте очистить временную папку. Эта папка содержит много системных конфигураций, которые иногда используются системой. Можно всегда создать ее резервную копию, если потребуется вернуть обратно.

Нажмите Win + R, чтобы вызвать окно «Выполнить», наберите %temp% и щелкните на «ОК».

Совместным нажатием Ctrl + A отметьте все записи, кликните на кнопку Удалить.

После перейдите на локальный диск C, откройте каталог Temp и также очистите все содержимое. Перезагрузите ПК и посмотрите, возникает ли ошибка, указывающую на недостаточную память при обработке команды.

Источник

Мастера подскажите, как бороться с “thread creation error: Недостаточно памяти для обработки команды”, говорит, что, мол, мало памяти, хотя под стек выделено 256M {$M 16384,268435456}, на машине стоит 512М, в диспетчере задач приложение показывает, что для приложения выделено около 5M. Пишу на Delphi 7 под WinXP.
Может, кто сталкивался с такой бедой, из каких соображений принимается решение, что не хватает памяти. До того как в проге было мало элементов (меньше сотни кнопок, меток и т.д.) такое сообщение не выскакивало, сейчас их несколько сотен, такое сообщение выскакивает, после того, как вызываю play_sound для проигрывания wav файла, но ф-н sndPlaySound все время выдает FALSE, хотя перенес этот модуль из старого проекта там все работало, а после этого еще раз play_sound но для пробирования тона, процесс (Thread) созданный sndPlaySound так и остается, а звука нет. Причем если вызывать sndPlaySound с тем же именем файла, но указанным как константа – звук есть, если же переменная (PChar) – звука нет.

Содержание ComboBox’ов (ItemIndex = -1 если задал имя файла ):
нет
100 Гц, 1 гудок
100 Гц, 2 гудка
200 Гц, 1 гудок
200 Гц, 2 гудка
300 Гц, 1 гудок
300 Гц, 2 гудка
500 Гц, 1 гудок
500 Гц, 2 гудка
700 Гц, 1 гудок
700 Гц, 2 гудка
1000 Гц, 1 гудок
1000 Гц, 2 гудка
1500 Гц, 1 гудок
1500 Гц, 2 гудка
2000 Гц, 1 гудок
2000 Гц, 2 гудка

type
TPlayToneThread = class(TThread) // Поток проигрывания тона
private
Frequency: integer; // Частота тона, Гц
Duration: integer; // Длительность выдачи тона, мс
Count: integer; // Кол-во выдаваемых тонов
protected
procedure Execute; override; // Исполняемая часть
end;

//———————————— Выдать на динамик тон —————————————-
procedure Sound(Frequency, Duration: Integer);
asm
push edx
push eax
mov eax, Win32Platform
cmp eax, VER_PLATFORM_WIN32_NT
jne @@9X
call Windows.Beep
ret
@@9X:
pop eax
pop edx
push ebx
push edx
mov bx, ax
mov ax, 34DDh
mov dx, 0012h
cmp dx, bx
jnc @@2
div bx
mov bx, ax
in al, 61h
test al, 3
jnz @@1
or al, 3
out 61h, al
mov al, 0B6h
out 43h, al
@@1:
mov al, bl
out 42h, al
mov al, bh
out 42h, al
call Windows.Sleep
in al, 61h
and al, 0FCh
out 61h, al
jmp @@3
@@2:
pop edx
@@3:
pop ebx
end;

//——————————— Реализация потока проигрывания тона —————————-
procedure TPlayToneThread.Execute;
begin
FreeOnTerminate:=True; // По завершению работы освободить память
while Count>0 do
begin
Sound(Frequency,Duration);
sleep(Duration);
dec(Count);
end;
Terminate; // На всяк случай завершаем поток
end;

//——————————— Процедура завершения потока ————————————
procedure TfmOSC_Buzzer.end_thread(Sender: TObject);
begin
PlayToneThread:=nil; // На всяк случай уничтожаем объект
end;

//————————————— Проиграть звук ———————————————
procedure TfmOSC_Buzzer.play_sound(cbSound: TComboBox; play: boolean = false);
const
Duration: integer = 75;
var
Frequency, Count: integer;
begin
if cbSound.ItemIndex=0 then exit; // Если нечего проигрывать то выходим

if cbSound.ItemIndex<0 then // Если это *.wav файл
try
sndPlaySound(PChar(cbSound.Text),SND_ASYNC); // то просто проигрываем его
except
end
else begin
Frequency:=StrToInt(Trim(Copy(cbSound.Text,1,4))); // Определили частоту и кол-во гудков
if Odd(cbSound.ItemIndex) then Count:=1 else Count:=2;
if IsWindowsNT then
begin
{
if PlayToneThread<>nil then // Если поток существует
if not PlayToneThread.Terminated then // Да он еще и не завершен
begin
if play then // Если нужно проиграть
PlayToneThread.Terminate // то завершили поток
else // Если событие
exit; // то выходим
end;
PlayToneThread:=TPlayToneThread.Create(true); // Создаем поток
PlayToneThread.OnTerminate:=end_thread; // Задали процедуру завершения
PlayToneThread.Priority:=tpNormal; // Задаем нормальный приоритет потоку
PlayToneThread.Frequency:=Frequency;
PlayToneThread.Duration:=Duration;
PlayToneThread.Count:=Count;
PlayToneThread.Resume; // Запускаем поток
}
{}
while Count>0 do
begin
Sound(Frequency,Duration);
sleep(Duration);
dec(Count);
end;
{}
end
else begin
while Count>0 do
begin
Sound(Frequency,Duration);
sleep(Duration);
dec(Count);
end;
end;
end;
end;

vuasya

1 / 1 / 2

Регистрация: 26.08.2013

Сообщений: 381

1

Правильно вызвать поток

24.03.2014, 00:51. Показов 2390. Ответов 2

Метки нет (Все метки)


Вызываю поток следующим образом

Delphi
1
2
3
4
5
6
7
8
repeat
 for Thread3:=0 to form3.sSpinEdit1.Value do begin
  with TStas.Create(true) do begin
   FreeOnTerminate:=true;
   Start;
  end;
 end;
until accounts.count=0;

но дает ошибку : thread creation error недостаточно памяти для обработки команды … как мне от нее избавиться ? чтоб не выдавало у меня ее ? как я понял ошибка вылетает в результате функции repeat- until , но если их убрать , то поток не закончит дело до конца (а именно гет запрос по ссылкам) подскажите, как быть ?

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

24.03.2014, 00:51

2

2649 / 2270 / 279

Регистрация: 24.12.2010

Сообщений: 13,725

24.03.2014, 10:28

2

Цитата
Сообщение от vuasya
Посмотреть сообщение

недостаточно памяти для обработки команды

Ты ж этих потоков наплодил туеву хучу одновременно, а ведь каждый из них требует

минимум

1 Мб вирт.памяти в пространстве процесса ! А оно не резиновое, пространство это. — для размещения пользовательских данных, кода и стеков процессу Win32-система может выделить не более 2 Гб

Вот и считай сколько объектов-потоков можно

теоретически

создать одновременно)
А практически и того меньше. Да и бессмысленно плодить потоки в количестве большем чем кол-во ядер CPU, поддерживаемое опер.системой.



0



vuasya

1 / 1 / 2

Регистрация: 26.08.2013

Сообщений: 381

24.03.2014, 15:47

 [ТС]

3

понимаю, а как можно тогда переделать ? мне тут подсказали об TThreadList , но вот никак не могу с ним разобраться … надо проверять кол-во работающих потоков и если их мало , то создавать новый поток и дописывать его в список, хранящий работающие потоки.
Не мог ли ты мне показать пример кодом ? нашел что-то вроде этого :

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Var
List: TList;
i: Integer;
begin
MyThreadList=TThreadList.Create;
i:=0;
Repeat
try
List:=MyThreadList.LockList;
If List.Count<3 Then
Begin
MyThreadList.Add(MyThread.Create(False));
Inc(i);
End;
finally
MyThreadList.UnlockList
until i>5

, но код не пашет , зависает …



0



Недостаточно ресурсов памяти

Zaratustra

Пассажир
Сообщения: 1
Зарегистрирован: Вт ноя 26, 2019 8:22 am
Благодарил (а):
0
Поблагодарили:
0

Недостаточно ресурсов памяти

Здравствуйте!
При попытке запуска любой задачи выдает:
Exception: Thread creation error: Недостаточно ресурсов памяти для обработки этой команды
WINDOWS 10 x64 LTSC

Изменил, чтобы запускался не как служба, а как приложение. Теперь при попытке открыть конфигуратор:
Application:
—————————————————————————
1.1 Start Date : Thu, 28 Nov 2019 08:18:26 +0500
1.2 Name/Description: xStarter.exe — (Routine computer tasks automation)
1.3 Version Number : 1.9.4.100
1.4 Parameters :
1.5 Compilation Date: Tue, 1 Oct 2019 18:01:22 +0500
1.6 Up Time : 1 second(s)

Exception:
——————————————————————————
2.1 Date : Thu, 28 Nov 2019 08:18:28 +0500
2.2 Address : 00448A38
2.3 Module Name : xStarter.exe — (Routine computer tasks automation)
2.4 Module Version: 1.9.4.100
2.5 Type : EOSError
2.6 Message : System Error. Code:_8.
Недостаточно ресурсов памяти для обработки этой команды.
2.7 ID : 76C5A207
2.8 Count : 1
2.9 Status : New
2.10 Note :
2.11 Sent : 0

Что можно сделать? Очень нужная программка!!!
Сейчас поставил «Запускать от Администратора», посмотрим, но думаю вряд ли поможет.
Может другую версию поставить?

Вложения
scrin.jpg
scrin.jpg (33.28 КБ) 2256 просмотров


kazakru

Пассажир
Сообщения: 5
Зарегистрирован: Вс окт 24, 2010 9:30 am
Благодарил (а):
0
Поблагодарили:
0

Re: Недостаточно ресурсов памяти

Сообщение

kazakru » Пн янв 13, 2020 8:40 am

я поддерживаю ТСа
пожалуйста разберитесь с утечкой памяти!
у меня есть секция с 20-ю задачами выполняемыми последовательно и так по кругу..
на 16 круге программа либо просто вылетает, либо останавливается с ошибкой недостаточно памяти
при попытке отправить баг репорт кричит что недостаточно ресурсов..
причем все остальное в винде нормально пашет и именно в этот момент памяти программа примерно 1 гиг жрет.перед отваливанием доходит до 3 гигов и вываливается в ошибку или просто пропадает..

у старых версий такого не наблюдалось, но там глюки были похуже, поэтому возвращаться не вариант.

программа нужная, сделайте ее платной и займитесь пожалуйста плотно

так же прошу разьясните про глобальные переменные, конкретно про галочку сохранять в файле.
может надо все переменные сделать что бы сохранялись в файле что бы так память не жрало..
я уже не знаю куда копать


Ошибка «Недостаточно памяти для обработки команды» встречается на серверах Windows и возникает при неправильно установленном значении реестра, а также после сброса или переустановки.

Для ее решения Майкрософт рекомендует изменить значение в определенном разделе реестра. Если проблема сохраняется, нет другого выбора, кроме как выполнить восстановление системы.

Содержание

  • 1 Внесение изменений в системный реестр
  • 2 Переустановка драйвера видеокарты
  • 3 Удаление файлов временной папки

Внесение изменений в системный реестр

В большинстве случаев устранить проблему с недостаточно выделенной памятью для обработки команды можно путем использования официального решения. Для его применения требуется доступ администратора. Нужно внести изменения в раздел. Если его нет, создадим вручную.

Примечание: Параметр «IRPStackSize» нужно поменять на том компьютере, к файлам которого мы обращаемся.

Поскольку будем вносить правки в системный реестр, рекомендуется создать резервную копию. Для этого разверните меню Файл, щелкните на Экспорт и выберите папку для сохранения копии.

Откройте Редактор реестра командой regedit из окна «Выполнить» (Win + R).

Перейдите по пути к разделу:

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesLanmanServerParameters

Найдите запись IRPStackSize. Если ее не существует, щелкните в правой части окна на пустое пространство, выберите Создать – Параметр DWORD (32 бита).

Установите имя нового параметра «IRPStackSize», щелкните правой кнопкой мыши на него и выберите «Изменить».

В поле значение установите большее число и нажмите на «OK». Значения находятся в пределах от 0x1 до 0xC. Они эквивалентны от 1 до 12 в десятичной системе исчисления.

После внесения требуемых изменений перезагрузите компьютер и проверьте, исправлена ли ошибка. Если она остается, увеличивайте значение до тех пор, пока не будет исправлена.

Переустановка драйвера видеокарты

Если ошибка возникает при запуске игры, возможно, что драйвер видеокарты поврежден или устарел. Для решения его нужно полностью удалить перед установкой нового, поэтому потребуется утилита DDU (Display Driver Uninstaller). Загрузите утилиту с официального сайта.

После установки перезапустите компьютер в безопасном режиме. Если используете Windows 10, откройте меню Пуск, кликните на кнопку Питания и, удерживая клавишу Shift, нажмите на Перезагрузку.

В среде восстановления перейдите по пути Поиск и устранение неисправностей – Дополнительные параметры – Параметры загрузки, затем нажмите на F4, чтобы загрузить систему в безопасном режиме.

Запустите DDU, укажите графический процессор и выберите первый вариант «Удалить и перезагрузить». Приложение автоматически удалит текущие драйвера, затем перезагрузит компьютер.

Запустите приложение GeForce Experience, откройте вкладку «Драйверы» и скачайте последнюю версию.

После обновления перезапустите ПК. Проверьте, исправлена ли ошибка. Если видите, что для обработки команды по-прежнему недостаточно ресурсов памяти перейдите к следующему способу.

Также обновить драйвер можно путем загрузки из сайта NVIDIA или AMD и последующего запуска загруженного файла.

Удаление файлов временной папки

Если продолжаете наблюдать, что недостаточно требуемой памяти для обработки этой команды, попробуйте очистить временную папку. Эта папка содержит много системных конфигураций, которые иногда используются системой. Можно всегда создать ее резервную копию, если потребуется вернуть обратно.

Нажмите Win + R, чтобы вызвать окно «Выполнить», наберите %temp% и щелкните на «ОК».

Совместным нажатием Ctrl + A отметьте все записи, кликните на кнопку Удалить.

После перейдите на локальный диск C, откройте каталог Temp и также очистите все содержимое. Перезагрузите ПК и посмотрите, возникает ли ошибка, указывающую на недостаточную память при обработке команды.

Понравилась статья? Поделить с друзьями:
  • Thread creation error delphi
  • This service is not available in your region crossfire как исправить
  • Thread 1 signal sigabrt swift как исправить
  • Thread 1 fatal error init coder has not been implemented
  • This servers accepts only legit clients go and buy it right now at как исправить