System error code 1400 недопустимый дескриптор окна что это

Простые руководства Доступные руководства каждому! Избавляемся от System Error Code 1400 Вы когда-нибудь сталкивались с системной ошибкой с кодом 1400 в Windows? Что делать, если вы увидели System Error Code 1400? Вот несколько советов для вас. Системная ошибка с кодом 1400 — «Недопустимый дескриптор окна«. Этот код ошибки может также отображаться как: «ERROR_INVALID_WINDOW_HANDLE» или […]

Содержание

  1. Простые руководства
  2. Доступные руководства каждому!
  3. Избавляемся от System Error Code 1400
  4. Избавляемся от System Error Code 1400 : 2 комментария
  5. Delphi и потоки: «Системная ошибка. Код: 1400. Недопустимый дескриптор окна»
  6. Синхронизация для спасения
  7. Другие варианты
  8. НЕ рекомендация
  9. Как исправить ошибку Internet Explorer 1400
  10. Проверка «IE Error Code 1400»
  11. Почему происходит ошибка времени выполнения 1400?
  12. Распространенные проблемы IE Error Code 1400
  13. Истоки проблем IE Error Code 1400
  14. System error code 1400 недопустимый дескриптор окна что это

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

Доступные руководства каждому!

Избавляемся от System Error Code 1400

Вы когда-нибудь сталкивались с системной ошибкой с кодом 1400 в Windows? Что делать, если вы увидели System Error Code 1400? Вот несколько советов для вас.

Системная ошибка с кодом 1400 — «Недопустимый дескриптор окна«. Этот код ошибки может также отображаться как: «ERROR_INVALID_WINDOW_HANDLE» или со значением 0x578.

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

Вы должны использовать ваш антивирус для сканирования вашего компьютера, вирус может повредить систему и тем самым вызывать ошибку. При обнаружении любого вируса, поместите его в карантин или удалите. Вы можете использовать CCleaner для очистки системы на данном этапе.

Если с помощью антивируса и CCleaner’а вы не избавились от проблемы, проверьте реестр, узнайте, есть ли какие-либо ошибки, если есть, то восстановите его. Можно использовать Reggenie, которая может восстанавливать реестр быстро и безопасно.

Если проблема остаётся, то лучше обратиться к специалистам для решения проблемы.

Избавляемся от System Error Code 1400 : 2 комментария

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

Источник

Delphi и потоки: «Системная ошибка. Код: 1400. Недопустимый дескриптор окна»

Поскольку я новичок в потоковой передаче, я столкнулся с проблемой:

Я создал небольшую оболочку для объекта Synapse THTTPSend для обработки вызовов Async посредством потока. Кажется, все идет хорошо, пока я не выйду из приложения и не получу эту ошибку (используя обработчик исключений madExcept) «Системная ошибка. Код: 1400. Недопустимый дескриптор окна».

Я отследил это до доступа к списку, это выглядит так:

  • GUI вызывает процедуру в моей оболочке и назначает метод обратного вызова
  • Wrapper создает поток и устанавливает обратный вызов
  • Thread выполняет свою работу (сообщение http), а затем вызывает обратный вызов оболочки
  • Обратный вызов Wrapper запускает другой обратный вызов в графическом интерфейсе, который затем обновляет некоторые элементы в списке.

Если я пропущу эту часть списка, ошибка никогда не произойдет, поэтому я думаю, что что-то может быть не так в моем коде потока, который портит vcl / gui, вероятно, потому, что он все еще работает, пока осуществляется доступ к VCL? Если я проверю список, то после завершения потока с ним будет что-то очень странное, иногда список даже не отображается или добавленные элементы не доступны для нажатия.

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

if Assigned(sObj.xOnAsyncRequestDone) then sObj.xOnAsyncRequestDone;

Как я мог это решить?

Вы разместили много кода, но не ключевую, релевантную часть. В частности, реализация вашего xOnAsyncRequestDone обработчика / метода событий (если только он буквально не вызывает только тот метод журнала, который вы опубликовали).

Этот метод выполняется в контексте потока TMySynHTTPAsync, и в зависимости от поведения, которое вы описываете, в частности того факта, который Synchronize решает вашу проблему, весьма вероятно, что некоторая активность в этом обработчике событий создает дескриптор окна.

Этот дескриптор окна затем принадлежит потоку HTTP Async , а не главному потоку приложения (иногда называемому «потоком VCL»), который в противном случае запускает ваше приложение. Когда ваше приложение закрывается, поток VCL выполняет некоторую заключительную уборку, уничтожая объекты, окна и т. Д., Если одно из этих окон было создано каким-либо другим потоком, это вызовет проблемы.

Оконные дескрипторы — это строгое свойство потока, в котором они были созданы. Вы не можете создать дескриптор окна в одном потоке, а затем уничтожить его в другом.

ПРИМЕЧАНИЕ. Это основа Windows, а не Delphi .

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

Должно быть совершенно очевидно, что эти механизмы очень уязвимы для проблем, которые могут возникнуть, когда методы VCL вызываются потоками, отличными от потока VCL. Вот почему вы часто здесь говорите, что « VCL не является потокобезопасным ».

Самый безопасный способ работы — манипулировать объектами VCL только из кода, выполняемого в самом потоке VCL.

Синхронизация для спасения

Фактически, именно поэтому Synchronize существует.

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

Значит, ваша проблема решена.

Другие варианты

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

Если ваш код специфичен для Windows, возможное альтернативное решение этой проблемы может заключаться в использовании того факта, что окна позволяют потокам отправлять (или публиковать) сообщения окнам в других потоках. Когда эти сообщения принимаются этими окнами, они затем обрабатываются собственным потоком этого окна, как и все другие сообщения этим окнам. то есть вы не можете в конечном итоге прервать сообщение «щелчок», полученное этим окном, внезапным прыжком через него, чтобы запустить уведомление из потока. Это уведомление просто должно дождаться своей очереди, пока окно не завершит обработку этого сообщения щелчка. Например.

Вы можете думать об этом как о системе «Синхронизация», «встроенной» в ОС.

Таким образом, вы могли бы, например, передать дескриптор окна в форму (или элемент управления, или что-либо еще с дескриптором окна) вашему асинхронному потоку HTTP во время инициализации, идентифицируя окно VCL, которое желает получить «запрос завершен» или другие уведомления от нить. Затем поток может отправлять уведомления этому дескриптору окна, используя PostMessage или SendMessage которые вы можете обработать, переопределив WindowProc в форме или используя объявленный обработчик сообщений.

Если поток использует SendMessage() для отправки уведомления, он автоматически приостанавливается и вынужден ждать, пока сообщение не будет получено и обработано окном (в потоке VCL).

Если поток использует, PostMessage() сообщение отправляется асинхронно, и поток может продолжить другую работу, не дожидаясь ожидания. Поток VCL в конечном итоге получит сообщение и обработает его.

НЕ рекомендация

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

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

Источник

Как исправить ошибку Internet Explorer 1400

Номер ошибки: Ошибка 1400
Название ошибки: IE Error Code 1400
Описание ошибки: Ошибка 1400: Возникла ошибка в приложении Internet Explorer. Приложение будет закрыто. Приносим извинения за неудобства.
Разработчик: Microsoft Corporation
Программное обеспечение: Internet Explorer
Относится к: Windows XP, Vista, 7, 8, 10, 11

Проверка «IE Error Code 1400»

Это наиболее распространенное условие «IE Error Code 1400», известное как ошибка времени выполнения (ошибка). Разработчики тратят много времени и усилий на написание кода, чтобы убедиться, что Internet Explorer стабилен до продажи продукта. Как и во всем в жизни, иногда такие проблемы, как ошибка 1400, упускаются из виду.

После первоначального выпуска пользователи Internet Explorer могут столкнуться с сообщением «IE Error Code 1400» во время запуска программы. После возникновения ошибки 1400 пользователь программного обеспечения имеет возможность сообщить разработчику об этой проблеме. Затем программисты могут исправить эти ошибки в коде и включить исправление, которое можно загрузить с их веб-сайта. Чтобы исправить такие ошибки 1400 ошибки, устанавливаемое обновление программного обеспечения будет выпущено от поставщика программного обеспечения.

Почему происходит ошибка времени выполнения 1400?

Сбой устройства или Internet Explorer обычно может проявляться с «IE Error Code 1400» в качестве проблемы во время выполнения. Три распространенные причины, по которым ошибки во время выполнения, такие как всплывающее окно ошибки 1400:

Ошибка 1400 Crash — Ошибка 1400 является хорошо известной, которая происходит, когда неправильная строка кода компилируется в исходный код программы. Обычно это происходит, когда Internet Explorer не может обработать данные в удовлетворительной форме и поэтому не может получить ожидаемый результат.

Утечка памяти «IE Error Code 1400» — Когда Internet Explorer обнаруживает утечку памяти, операционная система постепенно работает медленно, поскольку она истощает системные ресурсы. Потенциальным фактором ошибки является код Microsoft Corporation, так как ошибка предотвращает завершение программы.

Ошибка 1400 Logic Error — Логическая ошибка вызывает неправильный вывод, даже если пользователь дал действительные входные данные. Виновником в этом случае обычно является недостаток в исходном коде Microsoft Corporation, который неправильно обрабатывает ввод.

IE Error Code 1400 проблемы часто являются результатом отсутствия, удаления или случайного перемещения файла из исходного места установки Internet Explorer. Обычно, установка новой версии файла Microsoft Corporation позволяет устранить проблему, из-за которой возникает ошибка. В качестве последней меры мы рекомендуем использовать очиститель реестра для исправления всех недопустимых IE Error Code 1400, расширений файлов Microsoft Corporation и других ссылок на пути к файлам, по причине которых может возникать сообщение об ошибке.

Распространенные проблемы IE Error Code 1400

Общие проблемы IE Error Code 1400, возникающие с Internet Explorer:

  • «Ошибка в приложении: IE Error Code 1400»
  • «IE Error Code 1400 не является программой Win32. «
  • «Возникла ошибка в приложении IE Error Code 1400. Приложение будет закрыто. Приносим извинения за неудобства.»
  • «Не удается найти IE Error Code 1400»
  • «IE Error Code 1400 не может быть найден. «
  • «Ошибка запуска в приложении: IE Error Code 1400. «
  • «Не удается запустить IE Error Code 1400. «
  • «Отказ IE Error Code 1400.»
  • «Ошибка пути программного обеспечения: IE Error Code 1400. «

Эти сообщения об ошибках Microsoft Corporation могут появляться во время установки программы, в то время как программа, связанная с IE Error Code 1400 (например, Internet Explorer) работает, во время запуска или завершения работы Windows, или даже во время установки операционной системы Windows. Важно отметить, когда возникают проблемы IE Error Code 1400, так как это помогает устранять проблемы Internet Explorer (и сообщать в Microsoft Corporation).

Истоки проблем IE Error Code 1400

Проблемы IE Error Code 1400 могут быть отнесены к поврежденным или отсутствующим файлам, содержащим ошибки записям реестра, связанным с IE Error Code 1400, или к вирусам / вредоносному ПО.

В частности, проблемы IE Error Code 1400 возникают через:

  • Недопустимые разделы реестра IE Error Code 1400/повреждены.
  • Вирус или вредоносное ПО, которые повредили файл IE Error Code 1400 или связанные с Internet Explorer программные файлы.
  • IE Error Code 1400 злонамеренно удален (или ошибочно) другим изгоем или действительной программой.
  • Другая программа находится в конфликте с Internet Explorer и его общими файлами ссылок.
  • Internet Explorer (IE Error Code 1400) поврежден во время загрузки или установки.

Совместима с Windows 2000, XP, Vista, 7, 8, 10 и 11

Источник

System error code 1400 недопустимый дескриптор окна что это

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

m_hook_window:= TWinControl.Create(nil);
m_hook_window.Visible:=false;
m_hook_window.Left:=-1;
m_hook_window.Top:=-1;
m_hook_window.Width:=1;
m_hook_window.Height:=1;
m_hook_window.ParentWindow:=Application.Handle;

Ну и меняю его обработчик на свой.

Все отлично работает.

Останавливаю поток из программы и вызываю Destroy, а на строке
m_hook_window.Free;

Выдает ошибку EOSerror: «System Error. Code 1400: Недопустимый дескриптор окна». Как побороть?


Leonid Troyanovsky © ( 2005-02-27 18:47 ) [1]

> Создаю поток, в котором нужно будет отлавливать некоторые
> сообщения. Поэтому в конструкторе создаю окошечко:

В общем-то, поток может обрабатывать (некоторые) сообщения
и без окна.

> Ну и меняю его обработчик на свой.
> Все отлично работает.

> Останавливаю поток из программы и вызываю Destroy, а на
> строке
> m_hook_window.Free;

Оное деяние весьма сомнительно.

А приложение win32?


Набережных С. © ( 2005-02-27 20:02 ) [2]

По-моему AllocateHWND не являтся потокобезопасной.


Vand777 © ( 2005-02-27 20:27 ) [3]

2 Leonid Troyanovsky: спасибо. Так заработало без исключений.

Ну чтобы что-то присвоить m_hook_window.ParentWindow. А что еще можно присвоить?

> m_hook_window.Free;
>Оное деяние весьма сомнительно.

P.S. Приложение Win32.

2 Набережных С.: так можно мне использовать AllocateHWND? Может какие-то доп. меры принять для увеличения «потокобезопасности»? Я его использую ровно настолько, как написано в http://rsdn.ru/Forum/?mid=883505


Набережных С. © ( 2005-02-27 20:42 ) [4]


> Vand777 © (27.02.05 20:27) [3]

Что я могу сказать? AllocateHWND вызывает MakeObjectInstance, а та использует глобальные переменные. Что будет при одновременном обращении из разных потоков предугадать не трудно. Я ей не пользуюсь. С другой стороны, по всему нету полно примеров ее использования из дополнительных потоков и вроде как проблем ни у кого нет. Так что возможно, что я просто чего-то недопонимаю:( Решай сам.

А почему мой первоначальный вариант был плох? Ведь к этому m_hook_window обращался только один поток?

Почему тут страдает «потокобезопсаность»? Из-за наличия Application.processmessages в потоке?


Leonid Troyanovsky © ( 2005-02-27 22:25 ) [6]

> Ну чтобы что-то присвоить m_hook_window.ParentWindow. А
> что еще можно присвоить?

Хендл окна, созданного в том же потоке.
Хотя, видимо, не очень удачен сам замысел использования дочернего окна.

> > m_hook_window.Free;
> >Оное деяние весьма сомнительно.

Если с самого начала, то и само создание окна сомнительно,
бо если оно создается в конструкторе, то это не окно
создаваемого потока.
Ну, и с разрушением не все гладко, бо контролы включаются
в массив Controls and so on. Плюс последовательность —
при завершении потока окна уже нет (окно — собственность потока).

> 2 Набережных С.: так можно мне использовать AllocateHWND?
> Может какие-то доп. меры принять для увеличения

Использовать следует с оглядкой, т.к. AllocateHwnd не является потокобезопасным (Набережных С. © (27.02.05 20:42) [4]).
Однако, если оные потоки (окна) не создаются многопоточно и ежемилисекундно, то и проблем нет.
Ну, а в сомнительных случаях можно собс-ручно защитить вызов посредством критической секции.

Источник

INstantKiLLer

9 / 9 / 3

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

Сообщений: 363

1

22.07.2016, 19:55. Показов 9694. Ответов 2

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


Пишу многопоточную программу, а при ее закрытии после работы потоков выдает эту ошибку, из-за чего не могу понять, в интернете тоже дельного найти не смог.
В 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



5443 / 4267 / 1375

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

Сообщений: 19,204

Записей в блоге: 19

22.07.2016, 20:31

2

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



0



AllFree

Заблокирован

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



  • #1

Всем доброго времени суток, у меня возникла такая проблема: при выключении компьютера появляется ошибка windows media player network sharing service system error code 1400 Недопустимый дескриптор окна. Помогите избавиться от ошибки.

  • #2

Можно попробовать отключить всю аппаратную поддержку

  • #3

как это сделать, и чему это послужит?

  • #4

Должна пропасть ошибка, по-идее…
Какая винда?
Хотя вот вам ССЫЛКА прочитайте сами, там все понятно

  • #5

Спасибо за отклик, но с проблемой помог другой форум.

  • #6

В чем была проблема? Раз решили, напишите решение, вдруг другим понадобится

  • #7

Ошибку вызывает служба общих сетевых ресурсов проигрывателя Windows Media (Windows Media Player Network Sharing Service). На буржуйских форумах прелагалось решение выше. Других вариантов не нашел. От себя могу предложить попробовать вовсе отключить эту службу (тем более, что WM не используется): «Пуск» — «Панель управления» — «Администрирование» — «Службы» — двойной клик по «Служба общих сетевых ресурсов проигрывателя Windows Media» (Windows Media Player Network Sharing Service) — «Тип запуска — Отключено», «Применить», «ОК».
Вообще, суть проблемы заключается в следующем. В процессе работы создется некий объект (форма), которая имеет свой собственный дескриптор (как все окна в системе). При выключении происходит закрытие всех окон, приложений и сервисов. В данном случае один из объектов имеет неверный дескриптор, появляется ошибка, из которой следует, что нужно копать в сторону выше обозначенной службы или плеера.
PS, То, что вы им не пользуетесь — не значит, что какое-нибудь приложение не могло интегрировать в него свой модуль

  • #8

kuks777 написал(а):

Ошибку вызывает служба общих сетевых ресурсов

блин, предполагал, но сомневался :facepalm:

Добавлено спустя 4 минуты 44 секунды:
к тому же был такой глюк однажды на одном компе, решился вопрос с помощью проги Auslogics.BoostSpeed, при приминении советов программы отключить некоторые службы
ну вот, теперь бум знать :good3:

  • #9

Проблема была решена, но к сожалению на ночь, проверил снова все параметры, всё выключено. Что делать?

  • #10

может переустановить энтот медиаплеер??? предположительно не уверен или удалить его

  • #11

плеер я отключил через Установка и удаление программ-Установка компонентов Windows, потом службу(о чём написано выше). В Установка и удаление программ этого плеера нет, в Uninstall Tool 2.8.1(замена стандарту) только Windows Media Format 11 runtime

  • #12

Вот в чём была проблема: В диспетчере задач заметил неизвестный для меня процесс, исходивший из ветки wmplay32.exe-Logon.exe, узнал что Logon является Ammyy Admin только переименован. Удалив программу Logon и текстовый документ с C:WINDOWSsystem32 ошибка исчезла. Вот только не могу понять как эта дрянь попала мне в комп, может кто нибудь объяснит.

 
Vand777
 
(2005-02-27 18:29)
[0]

Уважаемые мастера!

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

 m_hook_window:= TWinControl.Create(nil);
 m_hook_window.Visible:=false;
 m_hook_window.Left:=-1;
 m_hook_window.Top:=-1;
 m_hook_window.Width:=1;
 m_hook_window.Height:=1;
 m_hook_window.ParentWindow:=Application.Handle;

Ну и меняю его обработчик на свой.

Все отлично работает.

Останавливаю поток из программы и вызываю Destroy,  а на строке
 m_hook_window.Free;

Выдает ошибку EOSerror: «System Error. Code 1400: Недопустимый дескриптор окна». Как побороть?

P.S. D2005.


 
Leonid Troyanovsky ©
 
(2005-02-27 18:47)
[1]


> Vand777   (27.02.05 18:29)  

> Создаю поток, в котором нужно будет отлавливать некоторые
> сообщения. Поэтому в конструкторе создаю окошечко:

AllocateHwnd

В общем-то, поток может обрабатывать (некоторые) сообщения
и без окна.

>  m_hook_window.ParentWindow:=Application.Handle;

Зачем?

> Ну и меняю его обработчик на свой.
> Все отлично работает.

Посмотри:

http://rsdn.ru/Forum/?mid=883505

> Останавливаю поток из программы и вызываю Destroy,  а на
> строке
>  m_hook_window.Free;

Оное деяние весьма сомнительно.

> P.S. D2005.

А приложение win32?


Regards, LVT.


 
Набережных С. ©
 
(2005-02-27 20:02)
[2]

По-моему AllocateHWND не являтся потокобезопасной.


 
Vand777 ©
 
(2005-02-27 20:27)
[3]

2 Leonid Troyanovsky: спасибо. Так заработало без исключений.

>  m_hook_window.ParentWindow:=Application.Handle;
>Зачем?

Ну чтобы что-то присвоить m_hook_window.ParentWindow. А что еще можно присвоить?

>  m_hook_window.Free;
>Оное деяние весьма сомнительно.

Почему?

P.S. Приложение Win32.

2 Набережных С.: так можно мне использовать AllocateHWND? Может какие-то доп. меры принять для увеличения «потокобезопасности»? Я его использую ровно настолько, как написано в http://rsdn.ru/Forum/?mid=883505


 
Набережных С. ©
 
(2005-02-27 20:42)
[4]


> Vand777 ©   (27.02.05 20:27) [3]

Что я могу сказать? AllocateHWND вызывает MakeObjectInstance, а та использует глобальные переменные. Что будет при одновременном обращении из разных потоков предугадать не трудно. Я ей не пользуюсь. С другой стороны, по всему нету полно примеров ее использования из дополнительных потоков и вроде как проблем ни у кого нет. Так что возможно, что я просто чего-то недопонимаю:( Решай сам.


 
Vand777 ©
 
(2005-02-27 21:30)
[5]

А почему мой первоначальный вариант был плох? Ведь к этому m_hook_window обращался только один поток?

Почему тут страдает «потокобезопсаность»? Из-за наличия Application.processmessages в потоке?


 
Leonid Troyanovsky ©
 
(2005-02-27 22:25)
[6]


> Vand777 ©   (27.02.05 20:27) [3]

> >  m_hook_window.ParentWindow:=Application.Handle;
> >Зачем?

> Ну чтобы что-то присвоить m_hook_window.ParentWindow. А
> что еще можно присвоить?

Хендл окна, созданного в том же потоке.
Хотя, видимо, не очень удачен сам замысел использования дочернего окна.

> >  m_hook_window.Free;
> >Оное деяние весьма сомнительно.

> Почему?

Если с самого начала, то и само создание окна сомнительно,
бо если оно создается в конструкторе, то это не окно
создаваемого потока.
Ну, и с разрушением не все гладко, бо контролы включаются
в массив Controls and so on. Плюс последовательность —
при завершении потока окна уже нет (окно — собственность потока).

> 2 Набережных С.: так можно мне использовать AllocateHWND?
> Может какие-то доп. меры принять для увеличения

Использовать следует с оглядкой, т.к. AllocateHwnd не является потокобезопасным (Набережных С. ©   (27.02.05 20:42) [4]).
Однако, если оные потоки (окна) не создаются многопоточно и ежемилисекундно, то и проблем нет.
Ну, а в сомнительных случаях можно собс-ручно защитить вызов посредством критической секции.


Regards, LVT.


    msm.ru

    Нравится ресурс?

    Помоги проекту!

    Пожалуйста, выделяйте текст программы тегом [сode=pas] … [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.


    Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
    1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
    2. Как «свернуть» программу в трей.
    3. Как «скрыться» от Ctrl + Alt + Del (заблокировать их и т.п.)
    4. Как прочитать список файлов, поддиректорий в директории?
    5. Как запустить программу/файл?
    … (продолжение следует) …


    Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
    Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


    Внимание
    Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
    Повторная попытка — 60 дней. Последующие попытки бан.
    Мат в разделе — бан на три месяца…

    >
    System Error. Code: 1400.
    , в чем проблемма?

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему



    Сообщ.
    #1

    ,
    28.10.04, 17:35

      Member

      **

      Рейтинг (т): 0

      В ХР под дельфями прога запускается нормально.
      Если просто запускаешь, в конце подвисает с сообщением.

      Цитата

      Exception EOSError in module Project1.exe at 0000E3D6.
      System Error. Code: 1400.
      Недопустимый дескриптор окна.

      А за ней

      Цитата

      Access violation at address 74E10B09. Read of address 74E10B09.

      В 98 тоже всё нормально. Никаких коммерческих компонентов не используется, кроме Rx. Работает в два потока. У кого какие соображения.

      Guru

      Rouse_



      Сообщ.
      #2

      ,
      28.10.04, 17:56

        Moderator

        *******

        Рейтинг (т): 320

        Вероятно пытаешся выполнить какето действия с разрушенным объектом ядра.
        Покажи код завершения…


        PalR



        Сообщ.
        #3

        ,
        28.10.04, 18:46

          Member

          **

          Рейтинг (т): 0

          Тут в начале идет код поиска файлов, а затем поиск внутри файлов.

          Цитата

          ………………………….
          тут поиск
          ………………………….
          Form1.ProgressBar1.Max := 100;
          Form1.ProgressBar1.Position := 100;
          Form1.RichEdit1.Text := ResFls.Text;
          ResFls.SaveToFile(Form1.Edit1.Text+’_’+FormatDateTime(‘ddmm’, Date)+’.TXT’);// последний выполненный код
          MessageDlg(‘Найдено ‘+ IntToStr(z)+ ‘ записей, которые сохранены в файл ‘+
          Form1.Edit1.Text+’_’+FormatDateTime(‘ddmm’, Date)+’.TXT’, mtInformation,[mbOk], 0);
          except
          MessageDlg(‘Неизвестная ошибка. Выполнение программы прервано !’, mtError,[mbOk], 0);
          end;
          Form1.Button1.Enabled := True;;
          Form1.DateEdit1.Enabled := True;
          Form1.DateEdit2.Enabled := True;
          Form1.Edit1.Enabled := True;
          Form1.RichEdit1.Enabled := True;

          Что интересно. Файл сохраняется и после этого прога подвисает.
          P.S. Как оказалось под дельфями тоже подвисает иногда.


          Vit



          Сообщ.
          #4

          ,
          28.10.04, 21:54

            А чего потоки делают? Похоже что дела в них


            Хома



            Сообщ.
            #5

            ,
            29.10.04, 06:31

              Newbie

              Рейтинг (т): 0

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

              Добавлено 29.10.04, 06:32
              Или пытался разрушить несколько раз один и тотже.


              Guest



              Сообщ.
              #6

              ,
              29.10.04, 07:20

                Цитата Хома @ 29.10.04, 09:31

                созданные рантаймом объекты.

                Добавлено Сегодня, 09:32
                Или пытался разрушить несколько раз один и тотже.

                F это что такое?

                Guru

                Miscђka



                Сообщ.
                #7

                ,
                29.10.04, 08:24

                  Объекты, созданные не в режиме конструктора (дизайна), а в процессе работы приложения.


                  Хома



                  Сообщ.
                  #8

                  ,
                  29.10.04, 08:29

                    Newbie

                    Рейтинг (т): 0

                    Ага. Опередили с ответом :)


                    PalR



                    Сообщ.
                    #9

                    ,
                    29.10.04, 15:33

                      Member

                      **

                      Рейтинг (т): 0

                      Я там ничего не создаю. Только бегаю по dbf (штук 1500) и ищу подстроку в строке и складываю в StringList. К каждой таблице обращаюсь через прямой путь, который подставляю в DataBaseName(что бы не привязываться к директории приложения). Это происходит в отдельном потоке. Мне кажется проблемма в BDE. Тут наверно надо использовать в дополнение TSession. Где то читал что в потоке так нужно обращаться к BDE. Что скажете.
                      зы. Может кто может исходники глянуть и найти ошибку.

                      Переделал. Не помогло.

                      Сообщение отредактировано: PalR — 30.10.04, 07:03


                      PalR



                      Сообщ.
                      #10

                      ,
                      30.10.04, 15:36

                        Member

                        **

                        Рейтинг (т): 0

                        Методом исключения выяснил что ошибка в
                        MessageDlg.
                        Закоментировал эти месседжи и всё стало нормально.
                        Теперь думаю чем заменить. ShowMessage тоже не катит.
                        P.S.Для модера.Что то теги не работают.

                        Сообщение отредактировано: PalR — 30.10.04, 15:45


                        PalR



                        Сообщ.
                        #11

                        ,
                        30.10.04, 17:47

                          Member

                          **

                          Рейтинг (т): 0

                          Вообщем сам спросил и сам ответил.Решение такое. Использовать в потоках
                          MessageBox(Form1,’Текст сообщения’,’Заголовок окна’, MB_ICONINFORMATION);
                          MB_ICONINFORMATION — иконка.

                          Если текст сообщения будет содержать переменные типа String, то не забудьте преобразовать их в PChar
                          MessageBox(Form1,PChar(‘Найдено ‘+ IntToStr(z)+ ‘ записей.’),’Результат’, MB_ICONINFORMATION);

                          Всем спасибо. Тема закрыта.

                          Сообщение отредактировано: PalR — 31.10.04, 08:42

                          Guru

                          Miscђka



                          Сообщ.
                          #12

                          ,
                          01.11.04, 03:48

                            Цитата PalR, 30.10.04, 23:47

                            MessageBox(Form1,’Текст сообщения’,’Заголовок окна’, MB_ICONINFORMATION);

                            корректнее будет

                            ExpandedWrap disabled

                              MessageBox(Form1.Handle, ‘текст сообщения’, ‘Caption’, MB_ICONINFORMATION or MB_OK);

                            Первый параметр — Handle окна, а не указатель на класс формы, в последнем — MB_OK это явное задание кнопки ОК


                            PalR



                            Сообщ.
                            #13

                            ,
                            01.11.04, 17:50

                              Member

                              **

                              Рейтинг (т): 0

                              Mischka,
                              Естественно. Привычная дельфовая подсказка не выскачела, вот и забыл.

                              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

                              0 пользователей:

                              • Предыдущая тема
                              • Delphi: Общие вопросы
                              • Следующая тема

                              Рейтинг@Mail.ru

                              [ Script execution time: 0,0359 ]   [ 16 queries used ]   [ Generated: 10.02.23, 03:34 GMT ]  

                              Понравилась статья? Поделить с друзьями:
                            • System error 10054 dameware
                            • System error code 127 не найдена указанная процедура
                            • System error code 126 не найден указанный модуль firebird
                            • Sys ovrld error
                            • System error 0x648 неизвестное свойство kaspersky