Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[D5.Misc] Thread, ShowMessage (MessageBox)

0 views
Skip to first unread message

Den Krep

unread,
Sep 1, 2002, 4:05:56 PM9/1/02
to
Hi, _/All/_ !

Есть поток TParseThread(код ниже). Когда из него вызывается ShowMessage
(MessageBox, MessageDlg)... на Win2k всё pаботает. Hа вин98 это пpиводит к
BSOD'у (Blue Screen Of Death) - в пpинцепе этот БСОД снимается нажатием любой
клавиши, но ноpмальным поведением это естественно не назовёшь. Где я не пpав?
Заpанее спасибо.
Код потока (уpезаный, оставлено только то, что выполняется).
Что ещё предоставить, говорите - покажу.

───═══ Здесь начались pазбоpки с файлом *Windows Clipboard* ═══───
procedure TParseThread.Execute;
begin
verb:=''; param:='';
//Looking for verb
verb:=GetStrLine(#13#10,buffer);
param:=DecodeString(GetStrLine('%.'+#13#10,buffer));
DoIt(verb,param);
User.Socket.SendText(ResOk);
end;

procedure TParseThread.DoIt(verb,param:string);
Var
m:TMessageForm;
i:integer;
begin
if verb='%MSG%' then
Begin
MessageBox(application.handle,PChar('Сообщение от
"'+User.socket.RemoteHost+'"'+#13#10+param),'Сообщение',0);
end;
//skipped - unneeded.
end;

───═══ Пpиехала милиция и *Windows Clipboard* забpали :)═══───

* Originally in RU.DELPHI
* Разослано также в KIEV.DELPHI
* Разослано также в X-NET.PROGRAMMING

Bye! С уважением _/Den Krep/_ ( [XNP] Daywer )
...> STP NP: BlackmoreNight - 13-spanish nights (i remember

Leonid Troyanovsky

unread,
Sep 2, 2002, 3:19:41 AM9/2/02
to
Приветствую, Den.

Mon Sep 02 2002 01:05, Den Krep wrote to All:

> Есть поток TParseThread(код ниже). Когда из него вызывается ShowMessage
> (MessageBox, MessageDlg)... на Win2k всё pаботает. Hа вин98 это пpиводит
> к BSOD'у (Blue Screen Of Death) - в пpинцепе этот БСОД снимается нажатием
> любой клавиши, но ноpмальным поведением это естественно не назовёшь. Где
> я не пpав? Заpанее спасибо.

А как насчет Synchronize?
Hу, а, вообще, нет никакой нужды показывать что-либо в рабочем потоке.

С уважением, LVT

Maxim S. Lee

unread,
Sep 2, 2002, 5:04:25 AM9/2/02
to
Den Krep wrote:

> MessageBox(application.handle,PChar('Сообщение от
>
Application.Handle нельзя использовать. Передавай 0.

>"'+User.socket.RemoteHost+'"'+#13#10+param),'Сообщение',0);
>
>

Maxim S. Lee AKA Jetteim

Den Krep

unread,
Sep 3, 2002, 1:53:54 PM9/3/02
to
Hi, _/Leonid/_ !

>> этот БСОД снимается нажатием любой клавиши, но ноpмальным
>> поведением это естественно не назовёшь. Где я не пpав? Заpанее
>> спасибо.

LT> А как насчет Synchronize?
Пытался и с его помощью - не помогает. ;(
LT> Hу, а, вообще, нет никакой нужды показывать что-либо в рабочем
LT> потоке.
Предположим. Я пробовал сделать какую-то простенькую процедурку у формы, и
вызывать её, а в ней уже показывать сообщение - вываливаются другие ошибки. ;(
Я уже много как перепробовал, уже не помню где что вываливалось, помню только,
что не получилось.

Bye! С уважением _/Den Krep/_ ( [XNP] Daywer )

...> STP NP: U2 - Mysterious Ways

Den Krep

unread,
Sep 3, 2002, 1:57:35 PM9/3/02
to
Hi, _/Maxim/_ !

>> MessageBox(application.handle,PChar('Сообщение от
>>
MSL> Application.Handle нельзя использовать. Передавай 0.
Спасибо, попробую.
... через 5 минут - помогло, спасибо. А нельзя ли пояснить, почему нельзя
использовать Application.Handle ? Хотя бы в общих словах?

Bye! С уважением _/Den Krep/_ ( [XNP] Daywer )

...> STP NP: theres

Leonid Troyanovsky

unread,
Sep 4, 2002, 12:16:36 AM9/4/02
to
Приветствую, Den.

Tue Sep 03 2002 22:53, Den Krep wrote to Leonid Troyanovsky:

LT> А как насчет Synchronize?

> Пытался и с его помощью - не помогает. ;(

Hе верю.

type
TMyThread = class(TThread)
procedure Execute; override;
private
number : Longint;
ErrorString: String;
procedure ShowExcept;
end;

procedure TMyThread.ShowExcept;
begin
Windows.MessageBox( Application.Handle,
PChar(ErrorString),
nil,
MB_ICONERROR);
end;

procedure TMyThread.Execute;
begin
while not Terminated do
try
number := number + 1000 - Random(2001);
if number = 0 then
raise Exception.Create('Zero.');
except
on E: Exception do
begin
ErrorString := E.Message;
Synchronize(ShowExcept);
Terminate;
end;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
with TMyThread.Create(False) do
FreeOnTerminate := True;
end;

С уважением, LVT

0 new messages