“Programiranje signala” je izraz, ki se pogosto uporablja za označevanje računalniškega programa, ki deluje predvsem kot odziv na signale ali dogodke, ki jih ustvari neka sprememba stanja ali uporabniški vnos. Skoraj vsak del računalniškega sistema, od periferne naprave do samega operacijskega sistema, lahko generira signal, ki ga lahko aplikacija zajame in nato obdela. V mnogih oblikah je programiranje signalov podobno programiranju, ki ga vodijo dogodki. Nekatere najpogostejše uporabe za programiranje signalov so grafični uporabniški vmesniki, ki se odzivajo na uporabniški vnos, omrežne komunikacije in nizkonivojski programi, ki zajemajo in obdelujejo specifične sistemske signale.
Signal v računalniškem programiranju lahko definiramo kot sporočilo, dogodek ali prekinitev, odvisno od njegovega izvora, arhitekture sistema ali celo želja programerja. V najširšem smislu je pokazatelj, da se je neko stanje ali podatek spremenil, včasih pa ga spremljajo dodatni podatki o nastali spremembi. Signal lahko ustvari uporabnik, ko pritisne tipko, iz strojne opreme, kot je monitor, ko pride do navpičnega vračanja, ali celo iz operacijskega sistema, ko se med dodelitvijo pomnilnika zgodi nekaj, kot je napaka strani.
Znotraj aplikacije lahko programiranje signalov prevzame več vrst arhitektur, vendar je ena najpogostejših model poslušalca ali opazovalca. Pri tej metodi se lahko del uporabniško definirane kode na nek način posreduje upravljavcu signalov, običajno znotraj operacijskega sistema, ki nato pokliče ta del kode za obdelavo vseh signalov, ki se ujemajo s tem, kar išče funkcija. Vrsta signala, ki ga funkcija lahko pogosto obravnava, je določena s spremenljivko, znano kot signalna maska, zato se nekateri signali ne posredujejo rutinam, ki niso zasnovane za njihovo obdelavo.
Druga vrsta programiranja signalov vključuje program, ki izvaja čakalno vrsto, ki sprejema dohodne signale. Ta čakalna vrsta se pokliče v glavni izvedbeni zanki programa in program se odzove, ko signal vstopi v čakalno vrsto. Vsak signal je nato mogoče logično razvrstiti, obdelati, prezreti ali posredovati drugemu procesu.
Nekatere težave se lahko pojavijo pri programiranju signalov, ko se uporabljajo sočasni procesi ali večnitne aplikacije. Zapleti lahko nastanejo, če na primer dve ločeni niti poslušata signale, ki jih ustvarita dve ločeni uporabniški vhodni napravi ali iz dveh omrežnih vtičnic. Če dva uporabnika hkrati poskušata spremeniti nekatere podatke, lahko programski podatki izpadejo iz sinhronizacije in se vsakemu uporabniku prikažejo drugače. Uporaba linearne čakalne vrste ali izvajanje metod sinhronizacije niti lahko pomaga preprečiti to situacijo.