On 19 October 2010 03:33, Ervin Orense Balaoro <ieros...@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 <undeconstruc...@gmail.com>
> wrote:
>>
>> On 18 October 2010 09:35, Ervin Orense Balaoro <ieros...@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
>
_______________________________________________
vala-list mailing list
vala-list@gnome.org
http://mail.gnome.org/mailman/listinfo/vala-list

Reply via email to