9 / 9 / 3
Регистрация: 11.10.2014
Сообщений: 363
|
||||||
1 | ||||||
'System Error. Code: 1400. Недопустимый дескриптор окна'22.07.2016, 19:55. Показов 11684. Ответов 2
Метки нет (Все метки)
Пишу многопоточную программу, а при ее закрытии после работы потоков выдает эту ошибку, из-за чего не могу понять, в интернете тоже дельного найти не смог.
В Debug она ссылается на код в System.SysUtils
0
|
22.07.2016, 19:55 | |
Ответы с готовыми решениями:
2
EOSError 1400 "Недопустимый дескриптор окна" Недопустимый дескриптор окна =) Ошибка Exception EOSError in module .... System error. Code: 1400. Invalid window handle. Недопустимый дескриптор окна |
Заблокирован
|
|
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 | |
22.07.2016, 21:50 | |
Помогаю со студенческими работами здесь
3
Отладка dll [System Error 1400] System Error. Code 1400. Недопустимый дескриптор окна EOSError 1400 “Недопустимый дескриптор окна” Недопустимый дескриптор окна. (Обмен сообщениями: TCP) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |