Post con tag signal

Qt e C++: signal e slot

Gli oggetti Qt comunicano tra loro mediante un flessibile meccanismo composto da signal e slot.

Un signal è un metodo che viene emesso, mediante la parola chiave emit, quando si ritiene opportuno. Essi non vengono implementati ma solo dichiarati e vanno inseriti, all’interno della classe, nella sezione signals.

Uno slot è invece un metodo che può essere invocato come risultato di un segnale emesso. Gli slot vanno inseriti nelle sezioni public slots, protected slots o private slots. Il modificatore di accesso viene applicato solo quando la funzione è utilizzata come metodo.

Continua >

I segnali in Python

Il modulo signal fornisce uno strumento per la gestione dei segnali.

Il seguente esempio mostra una semplice gestione dei segnali CTRL + C (interruzione da tastiera), CTRL + Z (stop da tastiera) e il segnale SIGALRM.
Il programma imposterà per questi segnali una funzione che li gestisce e si metterà in sleep per 10 secondi. Se non accade nulla dopo 5 secondi, si attiverà il segnale di alarm. Altrimenti vengono stampati gli altri due segnali, se questi sono stati inviati al programma:

import signal
import time

def code_to_string(code):

	if code == 2:
		return "SIGINT"
	elif code == 14:
		return "SIGALRM"
	elif code == 20:
		return "SIGTSTP"
	else:
		return str(code)

def sig_handler(signum, frame):
	code = code_to_string(signum)
	print "Segnale %s" % code

signal.signal(signal.SIGALRM, sig_handler)
signal.signal(signal.SIGINT, sig_handler)
signal.signal(signal.SIGTSTP, sig_handler)

signal.alarm(5)

time.sleep(10)

Invio di un segnale ad un processo in C su Linux

Il seguente esempio ha lo scopo di mostrare l’utilizzo della funzione kill che permette di inviare un signal ad un processo. I segnali intercettati saranno SIGUSR1 e SIGUSR2, segnali indicanti condizioni definite dall’utente.
Nella sua semplicità, l’esempio utilizza il tempo come sincronizzazione e il busy waiting, il che lo rende inefficente e instabile.
Un’implementazione migliore dovrebbe quantomeno mostrare la presenza di un semaforo.
Continua >