Re: [Vala] Vala: Signal from POSIX



On 19 October 2010 03:33, Ervin Orense Balaoro <ierosvin gmail com> wrote:
Yes, static variables will solve the problem. :D

Thanks Phil!

But there is a limitation to this approach by making Check implement an
interface(i.e. PrintInterface),
where printf_value() is from the interface implemented:

public class Check : PrintInterface{
  ...
  public static int x = 0;

  public open(){
    ...
    signal(SIGUSR1, sighandler);
  }
  ...
  public void sighandler(int signum) {
    x++;
    print_value();
  }

  public void print_value(){
    stdout.printf("%d", x);
  }
  ...
}

Do vala have anyway to get this running?

I don't know a general way to do this in any language, but you can do
it easily for a limited case. Anything that is static'ly addressable
can be used from the signal handler, so if you assign a particular
instance of Check to a static variable, you can invoke the method.

The only way to do the specific thing you illustrate is to have one
callback method per instance of Check, which is only possible if you
know in advance how many instances you will have.

On Mon, Oct 18, 2010 at 9:13 PM, Phil Housley <undeconstructed gmail com>
wrote:

On 18 October 2010 09:35, Ervin Orense Balaoro <ierosvin gmail com> wrote:
Hello,

I dont know if this is the right place to ask questions regarding vala.
But
anyway, ill post the question here just in case someone has the same
experience i had while working with vala using signal from posix.

Code:

public class Check{
 ...
 public int x = 0;

 public open(){
   ...
   signal(SIGUSR1, sighandler);
 }
 ...
 public void sighandler(int signum) {
   stdout.printf("%d", x++);
 }
 ...
}

How do we make our signal handlers access the global variables?
i write a similar code in C, but works okay there.

The callback needed for signal() is a void -> void method, so there is
no way to pass a pointer to your class instance, and so no way for the
callback to invoke the method on the correct instance of the Check
class.

Using a static method and variable should work I assume.

--
Phil Housley




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]