Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/64: Рейтинг темы: голосов - 64, средняя оценка - 4.77
9 / 9 / 3
Регистрация: 11.10.2014
Сообщений: 363
1

'System Error. Code: 1400. Недопустимый дескриптор окна'

22.07.2016, 19:55. Показов 11684. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пишу многопоточную программу, а при ее закрытии после работы потоков выдает эту ошибку, из-за чего не могу понять, в интернете тоже дельного найти не смог.
В Debug она ссылается на код в System.SysUtils
Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure RaiseLastOSError(LastError: Integer; const AdditionalInfo: string); overload;
var
  Error: EOSError;
begin
  if LastError <> 0 then
    Error := EOSError.CreateResFmt(@SOSError, [LastError, SysErrorMessage(LastError), AdditionalInfo])
  else
    Error := EOSError.CreateRes(@SUnkOSError);
  Error.ErrorCode := LastError;
  raise Error;   <--------------
end;
Возможно из-за того что я создаю поток через динамический массив?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.07.2016, 19:55
Ответы с готовыми решениями:

EOSError 1400 "Недопустимый дескриптор окна"
Доброго времени суток. После того как перенес некоторый код в поток при завершении программы стала...

Недопустимый дескриптор окна =)
Все пашет вот только... Обьясняю))) В общем Основное Приложение вызывает SendPPMsg из DLL и все...

Ошибка Exception EOSError in module .... System error. Code: 1400. Invalid window handle.
Доброе время суток! Я использовал поток в приложении CreateThread().. Примерно такая струкура...

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

2
5859 / 4588 / 1447
Регистрация: 14.04.2014
Сообщений: 20,352
Записей в блоге: 20
22.07.2016, 20:31 2
приведенный код вообще ни при чем
ошибка возникает скорее всего, когда завершающийся поток пытается обратиться к уже разрушенным объектам
0
Заблокирован
22.07.2016, 21:50 3
Прежде чем программировать потоки, прочитайте справку по ним, иначе погрязнете в ошибках.
Вот небольшой ман по потокам.

Код
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,syncobjs, contnrs, StdCtrls;

type
  TMyThread=class(tthread)
  private
    FTime: integer;
  procedure ThreadTerminated(sender:tobject);
    procedure SetTime(const Value: integer);
  protected
  procedure execute;override;
  public
  property Time:integer read FTime write SetTime;
  constructor create;
  destructor destroy; override;
  end;


type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  threadlist:tthreadlist;

implementation

{$R *.dfm}

function ThreadsCount:integer;
begin
  result:=threadlist.locklist.Count;
  threadlist.UnlockList;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  threadlist:=tthreadlist.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  while ThreadsCount >0 do
  application.ProcessMessages;
  threadlist.Free;
end;

{ TMyThread }

constructor TMyThread.create;
begin
  inherited create(true); // создаем ожидающий поток, чтобы можно было изменять параметры
  FreeOnTerminate:=true;
  Priority:=tpNormal;
  OnTerminate:=ThreadTerminated;
  ThreadList.Add(self);
end;

destructor TMyThread.destroy;
begin
  threadlist.LockList;

  /// здесь может быть код, для освобождения объектов


  inherited;
  threadlist.Remove(self);
  threadlist.UnlockList;
end;

procedure TMyThread.execute;
begin
  // код, который должен выполняться в потоке.
  sleep(FTime);

end;

procedure TMyThread.SetTime(const Value: integer);
begin
  FTime := Value;
end;

procedure TMyThread.ThreadTerminated(sender: tobject);
begin
  showmessage('Поток завершил работу');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i:integer;
  thread:tmythread;
begin
  for i:=1 to 10 do
  begin
    thread:=tmythread.create;
    thread.Time:=4000;
    thread.Resume;
  end;
end;

end.
1
22.07.2016, 21:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.07.2016, 21:50
Помогаю со студенческими работами здесь

Отладка dll [System Error 1400]
Пару дней назад я написал плагин для Google Chrome...Delphi+NPApi. Плагин выводит форму Hellow...

System Error. Code 1400. Недопустимый дескриптор окна
Вобщем такая проблема есть БД акссес и программа все рабоет но при закрытии программы выдает ошибку...

EOSError 1400 “Недопустимый дескриптор окна”
Программа (назовём её My1.exe ) периодически обращается из потока к COM-порту. На компьютере есть...

Недопустимый дескриптор окна. (Обмен сообщениями: TCP)
Доброго времени суток. Есть программа, которая производит обмен сообщениями по сети между...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru