Solved

Clone controller

Posted on 2004-09-06
8
206 Views
Last Modified: 2010-04-05
Hello guys,

I need to get component or function to make clone control function.
Better if this function will work with mutex. Fast and good.

Thanks,
Dan
0
Comment
Question by:DanDaemon
  • 3
  • 3
  • 2
8 Comments
 
LVL 22

Accepted Solution

by:
Ferruccio Accalai earned 70 total points
ID: 11989685
Try this my component (with source) www.afsoftware.it\Downloads\AFJustOne.zip

F68 ;-)
0
 

Author Comment

by:DanDaemon
ID: 11989897
Hello F68,

Probably you have same which does not use function FindWindow?
I do not want to use this function :)

Thanks,
Dmitry
0
 
LVL 22

Expert Comment

by:Ferruccio Accalai
ID: 11989918
the findwindow is used just in MenuDependent mode....
You can remove that part if you don't need it or just check for a mutex created by the menu (if you need this feauture)...
0
PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

 

Author Comment

by:DanDaemon
ID: 11989957
:) I so though... Thanks
0
 
LVL 22

Expert Comment

by:Ferruccio Accalai
ID: 11989968
Glad to have helped you :)

F68 ;-)
0
 
LVL 17

Expert Comment

by:Wim ten Brink
ID: 11990069
What's a clone control function, exactly? :)

I happen to have an interesting unit at http://www.workshop-alex.org/Sources/untExtraInterfaces.pas that wraps an interface around mutexes, events, critical sections and semaphores that make them quite easy to use.

If you want to discover if a process is running, the mutex will work quite nicely. So is the Semaphore, which could limit your application to an X amount of processes running at the same time. But an alternative could be the use of an event...

Instead of a Mutex, you could use an event. Give it some unique name. In a special thread, you just wait for an infinite time until it is triggered. When the second application creates it, my IEvent interface wil set the Existing property to true, so you know it's a second call to the application. In that case, you set the event so the original application will be triggered to do something. Your second application could then close itself again.

Haven't tested it myself, though. But theoretically, it should work.
0
 
LVL 17

Expert Comment

by:Wim ten Brink
ID: 11990147
As a simple example:

program Bang;

{$APPTYPE CONSOLE}

uses
  Classes,
  untExtraInterfaces;

type
  TMyThread = class( TThread )
  private
    Event: IEvent;
  protected
    procedure Execute; override;
  public
    constructor Create;
    destructor Destroy; override;
  end;

constructor TMyThread.Create;
begin
  inherited Create( False );
  FreeOnTerminate := False;
  Event := NewEvent( False, False, 'UniqueName' );
  Resume;
end;

destructor TMyThread.Destroy;
begin
  Event := nil;
  inherited;
end;

procedure TMyThread.Execute;
var
  Count: Integer;
begin
  if Event.Existing then begin
    WriteLn( 'Application already running.' );
    Event.Signal;
  end
  else begin
    WriteLn( 'First-time run.' );
    Count := 5;
    repeat
      repeat until Event.Wait( 1000 );
      WriteLn( 'We got triggered. Counts left: ', Count );
      Dec( Count );
    until ( Count = 0 );
  end;
end;

begin
  TMyThread.Create.WaitFor;
  ReadLn;
end.
0
 
LVL 17

Expert Comment

by:Wim ten Brink
ID: 11990153
Darn. Already accepted? And I thought the method by events was much nicer. :)
0

Featured Post

The Eight Noble Truths of Backup and Recovery

How can IT departments tackle the challenges of a Big Data world? This white paper provides a roadmap to success and helps companies ensure that all their data is safe and secure, no matter if it resides on-premise with physical or virtual machines or in the cloud.

Question has a verified solution.

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

Introduction The parallel port is a very commonly known port, it was widely used to connect a printer to the PC, if you look at the back of your computer, for those who don't have newer computers, there will be a port with 25 pins and a small print…
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…
In a recent question (https://www.experts-exchange.com/questions/28997919/Pagination-in-Adobe-Acrobat.html) here at Experts Exchange, a member asked how to add page numbers to a PDF file using Adobe Acrobat XI Pro. This short video Micro Tutorial sh…
Finds all prime numbers in a range requested and places them in a public primes() array. I've demostrated a template size of 30 (2 * 3 * 5) but larger templates can be built such 210  (2 * 3 * 5 * 7) or 2310  (2 * 3 * 5 * 7 * 11). The larger templa…

778 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