Vad är signalprogrammering?
"Signalprogrammering" är en term som ofta används för att hänvisa till ett datorprogram som fungerar främst som svar på signaler eller händelser som genereras av en viss förändring i tillstånd eller genom användarinmatning. Nästan vilken som helst del av ett datorsystem, från en kringutrustning till själva operativsystemet, kan generera en signal som kan fångas av en applikation och sedan behandlas. I många former liknar signalprogrammering händelsestyrd programmering. Några av de vanligaste användningarna för signalprogrammering är med grafiska användargränssnitt som svarar på användarinmatning, nätverkskommunikation och lågnivåprogram som fångar och hanterar specifika systemsignaler.
En signal i datorprogrammering kan definieras som ett meddelande, en händelse eller ett avbrott, beroende på dess ursprung, systemarkitekturen eller till och med programmerarens preferenser. I de bredaste termerna är det en indikator på att vissa tillstånd eller data har förändrats och ibland åtföljs av ytterligare information om förändringen som har skett. Signalen kan genereras av användaren när man trycker på en tangent, från hårdvara som en bildskärm när en vertikal återhämtning inträffar, eller till och med från operativsystemet när något som ett sidfel inträffar under minnesallokering.
Inom en applikation kan signalprogrammering ta på sig flera typer av arkitekturer, men en av de vanligaste är en lyssnar- eller observatörsmodell. I denna metod kan en bit av användardefinierad kod överföras på något sätt till en signalhanterare, vanligtvis inom operativsystemet, som sedan kallar det kodstycket för att behandla alla signaler som matchar vad funktionen söker. Den typ av signal som en funktion ofta kan hantera bestäms av en variabel känd som en signalmask, så vissa signaler överförs inte till rutiner som inte är utformade för att hantera dem.
En andra typ av signalprogrammering innebär att ha ett program som implementerar en kö som accepterar inkommande signaler. Den här kön undersöks i programmets huvudutföringsslinga och programmet reagerar när en signal kommer in i kön. Varje signal kan sedan logiskt sorteras, hanteras, ignoreras eller överföras till en annan process.
Vissa svårigheter kan uppstå i signalprogrammering när samtidiga processer eller multigängade applikationer används. Komplikationerna kan uppstå om till exempel två separata trådar lyssnar efter signaler som genereras av två separata användarinmatningsenheter eller från två nätverksuttag. Om två användare samtidigt försöker göra en ändring av vissa data, kan programdata falla ur synkronisering och verka annorlunda för varje användare. Att använda en linjär kö eller implementera trådsynkroniseringsmetoder kan hjälpa till att förhindra denna situation.