<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[signal() Problem mit übergabe für Signalhandler]]></title><description><![CDATA[<p>Hallo,<br />
ich bin neu hier und platze gleich mal mit einem hofentlich kleinen Problem in dieses Forum herein.<br />
Ich denke das Problem ist nicht neu aber ich kann nirgens eine Lösung finden.<br />
Da kommt immer eine Meldung, dass die Typen nicht zusammenpassen.<br />
Ich möchte eine Klasse definieren die folgende Funktion erfüllt:<br />
1. Anlegen eines Signalhandlers (=timer_handler)<br />
2. Starten eines Timers der in regelmäßigen Intervallen diese Funktion ausführt</p>
<p>Für Eure Hilfe möchte ich mich schon im Vorfeld ganz herzlich bedanken!</p>
<p>Hier mein Code:</p>
<p>[/code]/*<br />
* Timer.cpp<br />
*<br />
* Created on: 01.07.2016<br />
* Author: kurt<br />
*/</p>
<p>#include &lt;signal.h&gt;<br />
#include &lt;stdio.h&gt;<br />
#include &lt;string.h&gt;<br />
#include &lt;sys/time.h&gt;<br />
#include &lt;unistd.h&gt;<br />
#include &quot;Timer.h&quot;</p>
<p>void Timer::timer_handler (int signum)<br />
{<br />
/* Ganz einfacher Signalhandler */<br />
printf(&quot;Timer abgelaufen, Signum:%d &quot;, signum);<br />
static int count = 0;<br />
printf(&quot; ZÃ¤hler: %d\n&quot;, ++count);<br />
}</p>
<p>int Timer::InitTimer (void)<br />
{<br />
//struct sigaction sa;<br />
struct itimerval timer;<br />
int i=0;</p>
<p>// *********************************************************************<br />
// Fehler :<br />
// cannot convert ˜Timer::timer_handler<br />
// from<br />
// type void (Timer::)(int)<br />
// to<br />
// type __sighandler_t {aka void (*)(int)}<br />
// *********************************************************************</p>
<p>signal(SIGVTALRM, Timer::timer_handler);</p>
<p>/* Timer konfigurieren fuer 500 ms ... */<br />
timer.it_value.tv_sec = 0;<br />
timer.it_value.tv_usec = 500000;</p>
<p>/* ... und alle 500 ms danach */<br />
timer.it_interval.tv_sec = 0;<br />
timer.it_interval.tv_usec = 500000;</p>
<p>/* Timer starten */<br />
setitimer(ITIMER_VIRTUAL, &amp;timer, NULL);</p>
<p>/* Mach mal irgendwas */<br />
while(1)<br />
{<br />
printf (&quot;Fauler Zaehler i = &amp;d&quot;,i++);<br />
usleep (1000000);<br />
}<br />
return 0;<br />
}</p>
<p>und</p>
<p>/*<br />
* Timer.h<br />
*<br />
* Created on: 01.07.2016<br />
* Author: kurt<br />
*/</p>
<p>#ifndef TIMER_H_<br />
#define TIMER_H_</p>
<p>#include &lt;signal.h&gt;<br />
#include &lt;stdio.h&gt;<br />
#include &lt;string.h&gt;<br />
#include &lt;sys/time.h&gt;</p>
<p>class Timer<br />
{<br />
public:<br />
int InitTimer(void);<br />
private:<br />
void timer_handler (int);<br />
};</p>
<p>#endif /* TIMER_H_ */</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/338677/signal-problem-mit-übergabe-für-signalhandler</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 10:14:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/338677.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 02 Jul 2016 11:24:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to signal() Problem mit übergabe für Signalhandler on Sat, 02 Jul 2016 11:24:49 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich bin neu hier und platze gleich mal mit einem hofentlich kleinen Problem in dieses Forum herein.<br />
Ich denke das Problem ist nicht neu aber ich kann nirgens eine Lösung finden.<br />
Da kommt immer eine Meldung, dass die Typen nicht zusammenpassen.<br />
Ich möchte eine Klasse definieren die folgende Funktion erfüllt:<br />
1. Anlegen eines Signalhandlers (=timer_handler)<br />
2. Starten eines Timers der in regelmäßigen Intervallen diese Funktion ausführt</p>
<p>Für Eure Hilfe möchte ich mich schon im Vorfeld ganz herzlich bedanken!</p>
<p>Hier mein Code:</p>
<p>[/code]/*<br />
* Timer.cpp<br />
*<br />
* Created on: 01.07.2016<br />
* Author: kurt<br />
*/</p>
<p>#include &lt;signal.h&gt;<br />
#include &lt;stdio.h&gt;<br />
#include &lt;string.h&gt;<br />
#include &lt;sys/time.h&gt;<br />
#include &lt;unistd.h&gt;<br />
#include &quot;Timer.h&quot;</p>
<p>void Timer::timer_handler (int signum)<br />
{<br />
/* Ganz einfacher Signalhandler */<br />
printf(&quot;Timer abgelaufen, Signum:%d &quot;, signum);<br />
static int count = 0;<br />
printf(&quot; ZÃ¤hler: %d\n&quot;, ++count);<br />
}</p>
<p>int Timer::InitTimer (void)<br />
{<br />
//struct sigaction sa;<br />
struct itimerval timer;<br />
int i=0;</p>
<p>// *********************************************************************<br />
// Fehler :<br />
// cannot convert ˜Timer::timer_handler<br />
// from<br />
// type void (Timer::)(int)<br />
// to<br />
// type __sighandler_t {aka void (*)(int)}<br />
// *********************************************************************</p>
<p>signal(SIGVTALRM, Timer::timer_handler);</p>
<p>/* Timer konfigurieren fuer 500 ms ... */<br />
timer.it_value.tv_sec = 0;<br />
timer.it_value.tv_usec = 500000;</p>
<p>/* ... und alle 500 ms danach */<br />
timer.it_interval.tv_sec = 0;<br />
timer.it_interval.tv_usec = 500000;</p>
<p>/* Timer starten */<br />
setitimer(ITIMER_VIRTUAL, &amp;timer, NULL);</p>
<p>/* Mach mal irgendwas */<br />
while(1)<br />
{<br />
printf (&quot;Fauler Zaehler i = &amp;d&quot;,i++);<br />
usleep (1000000);<br />
}<br />
return 0;<br />
}</p>
<p>und</p>
<p>/*<br />
* Timer.h<br />
*<br />
* Created on: 01.07.2016<br />
* Author: kurt<br />
*/</p>
<p>#ifndef TIMER_H_<br />
#define TIMER_H_</p>
<p>#include &lt;signal.h&gt;<br />
#include &lt;stdio.h&gt;<br />
#include &lt;string.h&gt;<br />
#include &lt;sys/time.h&gt;</p>
<p>class Timer<br />
{<br />
public:<br />
int InitTimer(void);<br />
private:<br />
void timer_handler (int);<br />
};</p>
<p>#endif /* TIMER_H_ */</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500855</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500855</guid><dc:creator><![CDATA[c++Kurti]]></dc:creator><pubDate>Sat, 02 Jul 2016 11:24:49 GMT</pubDate></item><item><title><![CDATA[Reply to signal() Problem mit übergabe für Signalhandler on Sat, 02 Jul 2016 12:04:32 GMT]]></title><description><![CDATA[<p>Warum ist das eine Klasse? Ein simpler Namespace würde den gleichen Zweck erfüllen und nebenbei auch noch funktionieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500856</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500856</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sat, 02 Jul 2016 12:04:32 GMT</pubDate></item><item><title><![CDATA[Reply to signal() Problem mit übergabe für Signalhandler on Sat, 02 Jul 2016 12:18:15 GMT]]></title><description><![CDATA[<p>Hallo Manni66,<br />
vielen Dank für Deine schnelle Antwort.<br />
Heist das, dass mit C++ sowas nicht möglich ist?<br />
Tja, ich möchte weiterhin mit C++ arbeiten, weil das Problem Teil eines größeren Projektes ist.<br />
Ich habe es schon mit type-cast operator probiert aber das krieg ich nicht hin.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500857</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500857</guid><dc:creator><![CDATA[c++Kurti]]></dc:creator><pubDate>Sat, 02 Jul 2016 12:18:15 GMT</pubDate></item><item><title><![CDATA[Reply to signal() Problem mit übergabe für Signalhandler on Sat, 02 Jul 2016 12:35:32 GMT]]></title><description><![CDATA[<p>c++Kurti schrieb:</p>
<blockquote>
<p>Heist das, dass mit C++ sowas nicht möglich ist?</p>
</blockquote>
<p>Du hast meine Antwort aber schon gelesen?<br />
Dann erkläre mal, wie du diese Aussage daraus ableiten willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500862</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500862</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sat, 02 Jul 2016 12:35:32 GMT</pubDate></item><item><title><![CDATA[Reply to signal() Problem mit übergabe für Signalhandler on Sat, 02 Jul 2016 12:40:09 GMT]]></title><description><![CDATA[<p>Hallo manni66;<br />
Tut mir leid, wenn das missverständlich war. Aber die Aussage &quot;...und nebenbei auch noch funktionieren&quot; hat mich doch etwas stutzig werden lassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500864</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500864</guid><dc:creator><![CDATA[c++Kurti]]></dc:creator><pubDate>Sat, 02 Jul 2016 12:40:09 GMT</pubDate></item><item><title><![CDATA[Reply to signal() Problem mit übergabe für Signalhandler on Sat, 02 Jul 2016 12:44:43 GMT]]></title><description><![CDATA[<p>c++Kurti schrieb:</p>
<blockquote>
<p>Hallo manni66;<br />
Tut mir leid, wenn das missverständlich war. Aber die Aussage &quot;...und nebenbei auch noch funktionieren&quot; hat mich doch etwas stutzig werden lassen.</p>
</blockquote>
<p>Ich kan dir mit jedem Satz, den du sagst, weniger folgen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500867</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500867</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sat, 02 Jul 2016 12:44:43 GMT</pubDate></item><item><title><![CDATA[Reply to signal() Problem mit übergabe für Signalhandler on Sat, 02 Jul 2016 12:47:37 GMT]]></title><description><![CDATA[<p>c++Kurti schrieb:</p>
<blockquote>
<p>Heist das, dass mit C++ sowas nicht möglich ist?</p>
</blockquote>
<p>Wo hat er das denn gesagt? Natürlich kann man das in C++ machen, auch mit Klassen. Es ist nur ziemlich sinnlos eine Klasse ohne Member zu machen, das ist ein schlechter Ersatz für einen Namespace.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500868</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500868</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 02 Jul 2016 12:47:37 GMT</pubDate></item><item><title><![CDATA[Reply to signal() Problem mit übergabe für Signalhandler on Sat, 02 Jul 2016 14:08:43 GMT]]></title><description><![CDATA[<p>Lieber Seppj, lieber mani66,<br />
ich habe den Eindruck, dass hier einiges aus dem Ruder läuft.<br />
Deshalb möchte hier mal einiges voraus sagen:<br />
Ich arbeite privat an einem größeren Project mit dem periodisch Schrittmotoren gesteuert und Sensoren gelesen werden. Dabei bin ich eben auf dieses Problem gestoßen und ich möchte fagen ob es da eine Lösung mit der Parameterübergabe gibt, damit ich besser verstehe wie man sowas löst.<br />
Natürlich ist das vorliegende Beispiel nicht das Ende der Fahnenstange, sondern nur ein kleiner Teil des geplanten Objektes.<br />
Nun aber zu der Art wie sich das ganze entwickelt hat:</p>
<p>1.Ich habe ein Problem, das ich hier geschildert habe und um Hilfe angefragt habe.</p>
<p>2.Darauf hat mir manni66 geantwortet und mich gefragt:</p>
<p>manni66 schrieb:</p>
<blockquote>
<p>Warum ist das eine Klasse? Ein simpler Namespace würde den gleichen Zweck erfüllen und nebenbei auch noch funktionieren.</p>
</blockquote>
<p>3.Darauf habe ich ihm denke ich höflich geantwortet und ihm erkärt warum ich bei dem Klassenprinzip beleiben wolle. Nebenbei habe ich gefragt ob das mit C++ eventuell nicht möglich sei weil er ja schrieb dass das mit Namespaces funktioniert.<br />
<strong>Doch manni66</strong> ich habe Deine Anregung zur Kenntnis genommen dass man das möglicherweise mit Namespaces besser bzw. einfacher machen kann.</p>
<p>Zu Deiner Mitteilung Seppj :<br />
Das vorliegende Programm ist nur ein kleines Beispiel mit dem ich das Problem darstellen wollte. Da gehört noch mehr dazu, aber das würde keinen Sinn machen wenn ich da einen zu langen Code schiecken würde.<br />
Ich würde mich freuen, wenn ich schon bald Hilfe zu meinem Problem bekomme. Also verkürzt:<br />
Wie bekomme ich das hin, dass die Funktion <strong>signal(...)</strong> den Parameter <strong>timer_handler</strong> annimmt.<br />
Vielen Dank nochmal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500877</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500877</guid><dc:creator><![CDATA[c++Kurti]]></dc:creator><pubDate>Sat, 02 Jul 2016 14:08:43 GMT</pubDate></item><item><title><![CDATA[Reply to signal() Problem mit übergabe für Signalhandler on Sat, 02 Jul 2016 15:09:40 GMT]]></title><description><![CDATA[<p>c++Kurti schrieb:</p>
<blockquote>
<p>Also verkürzt:<br />
Wie bekomme ich das hin, dass die Funktion <strong>signal(...)</strong> den Parameter <strong>timer_handler</strong> annimmt.</p>
</blockquote>
<p>Mach timer_handler static.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500884</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500884</guid><dc:creator><![CDATA[krumpli]]></dc:creator><pubDate>Sat, 02 Jul 2016 15:09:40 GMT</pubDate></item><item><title><![CDATA[Reply to signal() Problem mit übergabe für Signalhandler on Sat, 02 Jul 2016 15:25:56 GMT]]></title><description><![CDATA[<p>krumpli schrieb:</p>
<blockquote>
<p>c++Kurti schrieb:</p>
<blockquote>
<p>Also verkürzt:<br />
Wie bekomme ich das hin, dass die Funktion <strong>signal(...)</strong> den Parameter <strong>timer_handler</strong> annimmt.</p>
</blockquote>
<p>Mach timer_handler static.</p>
</blockquote>
<p>Dann erklär mal, warum das besser ist, als einen Namespace zu verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500886</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500886</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sat, 02 Jul 2016 15:25:56 GMT</pubDate></item><item><title><![CDATA[Reply to signal() Problem mit übergabe für Signalhandler on Sat, 02 Jul 2016 16:30:43 GMT]]></title><description><![CDATA[<p>Hallo Krumpli,</p>
<p>vielen Dank für Deinen Tip.<br />
Das sieht gut aus. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500896</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500896</guid><dc:creator><![CDATA[c++Kurti]]></dc:creator><pubDate>Sat, 02 Jul 2016 16:30:43 GMT</pubDate></item><item><title><![CDATA[Reply to signal() Problem mit übergabe für Signalhandler on Sun, 03 Jul 2016 09:37:53 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>krumpli schrieb:</p>
<blockquote>
<p>c++Kurti schrieb:</p>
<blockquote>
<p>Also verkürzt:<br />
Wie bekomme ich das hin, dass die Funktion <strong>signal(...)</strong> den Parameter <strong>timer_handler</strong> annimmt.</p>
</blockquote>
<p>Mach timer_handler static.</p>
</blockquote>
<p>Dann erklär mal, warum das besser ist, als einen Namespace zu verwenden.</p>
</blockquote>
<p>Hab ich gesagt dass es besser ist? Ich habe diesen Vorschlag nur gemacht, weil er darauf hinweist, dass das nur ein Beispiel ist, um das Problem zu verdeutlichen.<br />
Wenn man schon unbedingt aufgrund des gezeigten Codes Verbesserungen erzwingen will hätte man mMn. statt namespace auf die Verwendung eines lambdas hinweisen können - die funktionieren nämlich auch wunderbar als signal-handler (solange man nichts capturen muss).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2500927</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2500927</guid><dc:creator><![CDATA[krumpli]]></dc:creator><pubDate>Sun, 03 Jul 2016 09:37:53 GMT</pubDate></item></channel></rss>