Thread overview |
---|
November 09, 2019 How to catch a signal | ||||
---|---|---|---|---|
| ||||
I am trying to catch a signal from the OS, as follows: int winch; void set_winch (int sig) { enum SIGWINCH = 28; signal.signal(SIGWINCH,cast(void function(int))set_winch); winch = sig; } The SIGWINCH signal notifies a window resize. In C this works (without the cast), but in D I get a compilation error: Error: function signal.set_winch(int sig) is not callable using argument types () missing argument for parameter #1: int sig What should be the right way to accomplish this? Thanks in advance for your answer. Wouter |
November 09, 2019 Re: How to catch a signal | ||||
---|---|---|---|---|
| ||||
Posted in reply to W.Boeke | On Saturday, 9 November 2019 at 12:44:20 UTC, W.Boeke wrote: > What should be the right way to accomplish this? Put an ampersand before the function to get its address: > signal.signal(SIGWINCH,cast(void function(int)) &set_winch); In C you can omit the & when taking a function address, but when you do that in D it tries to call the function and cast the return value of the function instead. |
November 09, 2019 Re: How to catch a signal | ||||
---|---|---|---|---|
| ||||
Posted in reply to Dennis | On Saturday, 9 November 2019 at 12:56:52 UTC, Dennis wrote: > > Put an ampersand before the function to get its address: >> signal.signal(SIGWINCH,cast(void function(int)) &set_winch); > > In C you can omit the & when taking a function address, but when you do that in D it tries to call the function and cast the return value of the function instead. Bingo! That worked. The modified code is: int winch; extern(C) void set_winch(int sig) nothrow @nogc @system { enum SIGWINCH = 28; signal.signal(SIGWINCH,&set_winch); winch = sig; } Wouter |
Copyright © 1999-2021 by the D Language Foundation