Re: [fpc-pascal] Solution for Timer in daemon

2013-03-02 Thread Ludo Brands
On 03/01/2013 07:10 PM, Krzysztof wrote:
 Hi,
 
 I'm reading that I can't use timer in daemon because daemon core is
 based on thread. 

daemonapp is using threads but nothing stops you from daemonizing your
app yourself with a simple fork.


 So I'm trying to create another thread which simulate
 timer. My interval is quite big (~1-5 minutes), so I can't just use
 sleep(6) because daemon will hung on terminate. So I have two ideas:
 
 1. Create loop with short sleep(1000) which on each loop check if main
 interval occur and check if daemon is terminated
 2. Create loop with RTL event with RtlEventWaitFor(Event, 6) and
 daemon on terminate just send event to worker so it immediately exit.
 
 What is the best efficient solution? Maybe exists another way?
 

Very difficult to give an absolute answer without knowing what the
daemon is doing.

On unix, an alternate solution is to use fpSelect (Function
fpSelect(N:cint;readfds,writefds,exceptfds:pfdSet;TimeOut:PTimeVal):cint;
 ) and specify a time-out value. You can specify a signal with exceptfds
or a file descriptor with readfds/writefds that will trigger the return
of select. I have written a few daemons that are stopped by sending them
a signal. fpSelect is then a natural solution. If your daemon is already
receiving control data from the outside through sockets, FIFO's or
whatever file, simply attach the select to the file descriptor of that
channel.

Note that the time precision of loops using sleep is not good at all.
Use fptime to decide when to trigger the task. If a precision higher
than 1000ms is needed, nothing stops you from modulating the sleep time
based on fptime so that the last sleep expires at the time wanted.

So the best solution really depends on what else you are doing in the
daemon.

Ludo
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Solution for Timer in daemon

2013-03-02 Thread Michael Van Canneyt



On Sat, 2 Mar 2013, Ludo Brands wrote:


On 03/01/2013 07:10 PM, Krzysztof wrote:

Hi,

I'm reading that I can't use timer in daemon because daemon core is
based on thread.


daemonapp is using threads but nothing stops you from daemonizing your
app yourself with a simple fork.


The threads are not there for daemonizing. 
They are there because a single app can host multiple services (daemons) as on Windows.



So I'm trying to create another thread which simulate
timer. My interval is quite big (~1-5 minutes), so I can't just use
sleep(6) because daemon will hung on terminate. So I have two ideas:

1. Create loop with short sleep(1000) which on each loop check if main
interval occur and check if daemon is terminated
2. Create loop with RTL event with RtlEventWaitFor(Event, 6) and
daemon on terminate just send event to worker so it immediately exit.

What is the best efficient solution? Maybe exists another way?



Very difficult to give an absolute answer without knowing what the
daemon is doing.

On unix, an alternate solution is to use fpSelect (Function
fpSelect(N:cint;readfds,writefds,exceptfds:pfdSet;TimeOut:PTimeVal):cint;
) and specify a time-out value.


I would go for this.

Michael.
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


[fpc-pascal] Solution for Timer in daemon

2013-03-01 Thread Krzysztof
Hi,

I'm reading that I can't use timer in daemon because daemon core is based
on thread. So I'm trying to create another thread which simulate timer. My
interval is quite big (~1-5 minutes), so I can't just use sleep(6)
because daemon will hung on terminate. So I have two ideas:

1. Create loop with short sleep(1000) which on each loop check if main
interval occur and check if daemon is terminated
2. Create loop with RTL event with RtlEventWaitFor(Event, 6) and daemon
on terminate just send event to worker so it immediately exit.

What is the best efficient solution? Maybe exists another way?

Regards.
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Re: [fpc-pascal] Solution for Timer in daemon

2013-03-01 Thread Leonardo M . Ramé



 From: Krzysztof dib...@wp.pl
To: fpc-pascal fpc-pascal@lists.freepascal.org 
Sent: Friday, March 1, 2013 3:10 PM
Subject: [fpc-pascal] Solution for Timer in daemon
 

Hi,


I'm reading that I can't use timer in daemon because daemon core is based on 
thread. So I'm trying to create another thread which simulate timer. My 
interval is quite big (~1-5 minutes), so I can't just use sleep(6) because 
daemon will hung on terminate. So I have two ideas:


1. Create loop with short sleep(1000) which on each loop check if main 
interval occur and check if daemon is terminated
2. Create loop with RTL event with RtlEventWaitFor(Event, 6) and daemon on 
terminate just send event to worker so it immediately exit.


What is the best efficient solution? Maybe exists another way?


Regards.

Well, as far as I know, sleep is no thread safe, it will block your app.



Leonardo M. Ramé
http://leonardorame.blogspot.com
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Solution for Timer in daemon

2013-03-01 Thread Sven Barth

On 01.03.2013 19:28, Leonardo M. Ramé wrote:





From: Krzysztof dib...@wp.pl
To: fpc-pascal fpc-pascal@lists.freepascal.org
Sent: Friday, March 1, 2013 3:10 PM
Subject: [fpc-pascal] Solution for Timer in daemon


Hi,


I'm reading that I can't use timer in daemon because daemon core is based on 
thread. So I'm trying to create another thread which simulate timer. My 
interval is quite big (~1-5 minutes), so I can't just use sleep(6) because 
daemon will hung on terminate. So I have two ideas:


1. Create loop with short sleep(1000) which on each loop check if main interval 
occur and check if daemon is terminated
2. Create loop with RTL event with RtlEventWaitFor(Event, 6) and daemon on 
terminate just send event to worker so it immediately exit.


What is the best efficient solution? Maybe exists another way?


Regards.


Well, as far as I know, sleep is no thread safe, it will block your app.


Sleep only blocks the current thread.

Regards,
Sven

___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Solution for Timer in daemon

2013-03-01 Thread Mattias Gaertner
On Fri, 1 Mar 2013 10:28:20 -0800 (PST)
Leonardo M. Ramé martinr...@yahoo.com wrote:

[...] 
 
 Well, as far as I know, sleep is no thread safe, it will block your app.

sleep blocks only the thread.

Mattias
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Solution for Timer in daemon

2013-03-01 Thread Krzysztof
I know how sleep blocking works in thread :) . I'm just wondering what is
better, sleep or RTL event or something else
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Re: [fpc-pascal] Solution for Timer in daemon

2013-03-01 Thread Sven Barth

On 01.03.2013 21:17, Krzysztof wrote:

I know how sleep blocking works in thread :) . I'm just wondering what
is better, sleep or RTL event or something else


You might know, but we answered to Leonardo who does not seem to know

___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal