05.11.2013 Aufrufe

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

Zahn - Unix-Netzwerkprogramminerung mit Threads, Sockets und SSL

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Beispiel 3.9. pthreads-signal.c, Teil 2<br />

53 int main( int argc, char *argv[] )<br />

54 {<br />

55 pthread_t tid;<br />

56 sigset_t sigset;<br />

57 struct timespec timeout;<br />

58 int status;<br />

59<br />

60 /* Signalmaske initialisieren */<br />

61 sigemptyset( &sigset );<br />

62 sigaddset( &sigset , SIGINT );<br />

3.3 Pthreads <strong>und</strong> <strong>Unix</strong>-Prozesse 143<br />

63<br />

64 /* Signalmaske für den main()-Thread setzen */<br />

65 status = pthread_sigmask( SIG_BLOCK , &sigset , NULL );<br />

66 if( status != 0 )<br />

67 error_exit( "pthread_sigmask()", status );<br />

68<br />

69 /* Der sigcatcher -Thread erbt die Signalmaske */<br />

70 status = pthread_create( &tid, NULL, sigcatcher , NULL );<br />

71 if( status != 0 )<br />

72 error_exit( "pthread_create()", status );<br />

73<br />

74 /* Thread entkoppeln , es folgt kein pthread_join() mehr */<br />

75 status = pthread_detach( tid );<br />

76 if( status != 0 )<br />

77 error_exit( "pthread_detach()", status );<br />

78<br />

79 /* relativen Timeout in absolute Zeitangabe umwandeln */<br />

80 timeout.tv_sec = time( NULL ) + TIMEOUT;<br />

81 timeout.tv_nsec = 0;<br />

82<br />

83 printf( "Drück %d mal Ctrl-C <strong>und</strong> alles ist ok.\n",<br />

84 INTERRUPTS );<br />

85<br />

86 status = pthread_mutex_lock( &sig_mutex );<br />

87 if( status != 0 )<br />

88 error_exit( "pthread_mutex_lock()", status );<br />

89<br />

90 /* gewünschte Anzahl von Signalen oder Timeout abwarten */<br />

91 while( sig_count < INTERRUPTS )<br />

92 {<br />

93 status = pthread_cond_timedwait( &sig_cond , &sig_mutex ,<br />

94 &timeout );<br />

95 if( status == ETIMEDOUT )<br />

96 break;<br />

97 else if( status != 0 )<br />

98 error_exit( "pthread_cond_timedwait()", status );<br />

99 }

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!