У меня проблема с тем, что Delphi (2010) IDE и программа зависают во время отладки при запуске потока. Оба окна не отвечают. Когда я убиваю программу, IDE работает снова.Delphi IDE зависает при создании потока
Понадобилось время, мне пришлось удалить кусочки моей программы, и я нашел проблему. Это вызвано VirtualStringTree.
Так что, если я ставлю только пустой VirtualStringTree (v. 5.5.3) на форму, одну кнопку выполнить TThread с помощью «Sleep (2000)» в процедуре Execute и запустить такую программу под отладчиком, она зависает (обычно сначала нажмите). Когда я удаляю VST, он работает. Я также заметил, что служба отчетов Windows запущена, но я ничего не нашел в журнале событий Windows.
Кто-нибудь знает, как это возможно?
Полный источник здесь
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, VirtualTrees, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
VirtualStringTree1: TVirtualStringTree;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
TTestThread = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TTestThread }
procedure TTestThread.Execute;
begin
FreeOnTerminate:=True;
Sleep(2000);
end;
{ TForm }
procedure TForm1.Button1Click(Sender: TObject);
begin
TTestThread.Create(False);
end;
end.
EDIT:
Я также пытался отладить процесс Delphi. Я привязался от второй к первой IDE. Когда я нажимаю кнопку, чтобы начать поток, обе IDE зависают. Поэтому я попытался с Delphi 7, который я также установил. Это сработало. Он находится в петле где-то в ntdll.NtWaitForMultipleObjects, KERNELBASE.WaitForMultipleObjectsEx, USER32.MsgWaitForMultipleObjects.
Я полностью переустановил Delphi, без изменений. Он также может быть связан с этой строкой в источнике VirtualStringTree: «WaitForSingleObject (WorkEvent, INFINITE);». Когда я удаляю его, он не замерзает. Но я думаю, что это необходимо.
Наконец, я установил Delphi XE и работает правильно. Это загадочно.
Непонятно, каков контекст. Пакет времени разработки. Исполняемый запуск под отладчиком? Или что-то другое. Просьба дать точные шаги для воспроизведения. –
Я немного изменил его. Да, он выполняется под отладчиком. Только один VirtualStringTree и одна кнопка для запуска любого TThread. – smooty86
Можете ли вы включить полный источник небольшой программы, которая воспроизводит это? (Так как это выглядит как крошечная программа будет воспроизводить его ...) –