Hvad er signalprogrammering?
"Signalprogrammering" er et udtryk, der ofte bruges til at henvise til et computerprogram, der primært fungerer som svar på signaler eller begivenheder, der er genereret af en eller anden ændring i tilstand eller ved hjælp af input fra brugeren. Næsten enhver del af et computersystem, fra en perifere enhed til selve operativsystemet, kan generere et signal, der kan indfanges af en applikation og derefter behandles. I mange former ligner signalprogrammering begivenhedsstyret programmering. Nogle af de mest almindelige anvendelser til signalprogrammering er med grafiske brugergrænseflader, der reagerer på brugerinput, netværkskommunikation og lavt niveau-programmer, der fanger og håndterer specifikke systemsignaler.
Et signal i computerprogrammering kan defineres som en meddelelse, en begivenhed eller en afbrydelse, afhængigt af dets oprindelse, systemarkitekturen eller endda programmets præference. I det bredeste udtryk er det en indikator for, at nogle tilstande eller data er ændret, og nogle gange ledsages det af yderligere oplysninger om den ændring, der er sket. Signalet kan genereres af brugeren, når der trykkes på en tast, fra hardware såsom en skærm, når der opstår en lodret tilbagetrækning, eller endda fra operativsystemet, når der sker noget som en sidefejl under hukommelsesallokering.
I en applikation kan signalprogrammering påtage sig flere typer arkitekturer, men en af de mest almindelige er en lytter eller en observatørmodel. I denne metode kan et stykke brugerdefineret kode overføres på en eller anden måde til en signalbehandler, normalt inden i operativsystemet, der derefter kalder det stykke kode til at behandle alle signaler, der matcher, hvad funktionen søger. Den type signal, en funktion ofte kan håndtere, bestemmes af en variabel, der kaldes en signalmaske, så nogle signaler overføres ikke til rutiner, der ikke er designet til at håndtere dem.
En anden type signalprogrammering involverer at have et program, der implementerer en kø, der accepterer indgående signaler. Denne kø er pollet i programmets hovedudførelsessløjfe, og programmet reagerer, når et signal kommer ind i køen. Hvert signal kan derefter logisk sorteres, håndteres, ignoreres eller overføres til en anden proces.
Nogle vanskeligheder kan opstå ved signalprogrammering, når der anvendes samtidige processer eller flertrådede applikationer. Komplikationerne kan opstå, hvis for eksempel to separate tråde lytter til signaler genereret af to separate brugerindgangsenheder eller fra to netværksstik. Hvis to brugere samtidigt forsøger at foretage en ændring af nogle data, kan programdataene falde ud af synkronisering og fremstå forskelligt for hver bruger. Brug af en lineær kø eller implementering af trådsynkroniseringsmetoder kan hjælpe med at forhindre denne situation.