Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

Shutting down application on pipes message

Posted on 2009-05-05
4
Medium Priority
?
607 Views
Last Modified: 2012-05-06
Hi, I'm trying to use rlibby's TPipeServer/Client components for interprocess communication. In this case I want to shut down the server application upon receiving the message 'QUIT'. This causes problems because the pipeserver component does not seem to handle it very well when it is being destroyed while handling a message. It causes an access violation in ntdll read of address 00000010.

Does anyone have a solution on how to do this, maybe by changing the code on the message recieving end, or by modifying the pipe component?

Also see the related question on how to get the pipes components working.

Im using Delphi 2009 v12.0.3210.17555 and the pipes components of 10.20.2008.
Procedure TForm1.PipeServer1PipeMessage(Sender: TObject; Pipe: HPIPE; Stream: TStream);
var S: AnsiString;
begin
  SetLength(S, Stream.Size);
  Stream.Read(S[1], Length(S));
  if (S = 'QUIT') then
  begin
    PipeServer1.Active := false;
    Close; // causes access violation in pipeserver component!
  end;
end;

Open in new window

0
Comment
Question by:mrdnote
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
4 Comments
 
LVL 38

Assisted Solution

by:Geert Gruwez
Geert Gruwez earned 400 total points
ID: 24303296
give it time to close down, send a close message instead ...

if (S = 'QUIT') then
begin
  PipeServer1.Active := false;
  PostMessage(Handle, WM_CLOSE, 0, 0);
end;
0
 

Author Comment

by:mrdnote
ID: 24303349
Thanx Geert. Somehow setting Active to False does something to the message queue, causing it not to process the WM_CLOSE message. If I remove the PipeServer1.Active := false line, the WM_CLOSE is propagated and the form closes, however the access violation remains :(
0
 
LVL 38

Expert Comment

by:Geert Gruwez
ID: 24303390
what does the stack trace tell you ?
press - Ctrl-F3 to see what originated a procedure.

That could tell you what the cause of the violation is.
Check all procedures in this list to see if they don't access a component which has been freed allready.
You may have to press F7 once, to get a decent stack trace.
0
 
LVL 26

Accepted Solution

by:
Russell Libby earned 600 total points
ID: 24304418

Don't touch the active state in the event handler for the pipe server, because it will cause the message queue to flush when the DoShutdown procedure gets called. Just PostMessage the WM_CLOSE to your handle, and then in the FormClose set the Active state to false.

Regards,
Russell
0

Featured Post

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Creating an auto free TStringList The TStringList is a basic and frequently used object in Delphi. On many occasions, you may want to create a temporary list, process some items in the list and be done with the list. In such cases, you have to…
Have you ever had your Delphi form/application just hanging while waiting for data to load? This is the article to read if you want to learn some things about adding threads for data loading in the background. First, I'll setup a general applica…
This course is ideal for IT System Administrators working with VMware vSphere and its associated products in their company infrastructure. This course teaches you how to install and maintain this virtualization technology to store data, prevent vuln…
In this video, Percona Solutions Engineer Barrett Chambers discusses some of the basic syntax differences between MySQL and MongoDB. To learn more check out our webinar on MongoDB administration for MySQL DBA: https://www.percona.com/resources/we…
Suggested Courses

610 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question