“Programiranje signala” je izraz koji se često koristi za označavanje računalnog programa koji prvenstveno funkcionira kao odgovor na signale ili događaje generirane nekom promjenom stanja ili korisničkim unosom. Gotovo svaki dio računalnog sustava, od perifernog uređaja do samog operacijskog sustava, može generirati signal koji aplikacija može uhvatiti i zatim obraditi. U mnogim oblicima, programiranje signala nalikuje programiranju vođenom događajima. Neke od najčešćih upotreba za programiranje signala su grafička korisnička sučelja koja reagiraju na korisnički unos, mrežna komunikacija i programi niske razine koji hvataju i upravljaju specifičnim signalima sustava.
Signal u računalnom programiranju može se definirati kao poruka, događaj ili prekid, ovisno o njegovom porijeklu, arhitekturi sustava ili čak preferencijama programera. U najširem smislu, to je pokazatelj da se neko stanje ili podatak promijenio, a ponekad je popraćen dodatnim informacijama o nastaloj promjeni. Signal može generirati korisnik kada se pritisne tipka, iz hardvera kao što je monitor kada dođe do vertikalnog povlačenja, ili čak iz operativnog sustava kada se dogodi nešto poput greške stranice tijekom dodjele memorije.
Unutar aplikacije, programiranje signala može poprimiti nekoliko vrsta arhitektura, ali jedna od najčešćih je model slušatelja ili promatrača. U ovoj metodi, dio korisnički definiranog koda može se na neki način proslijediti rukovaocu signala, obično unutar operacijskog sustava, koji zatim poziva taj dio koda da obradi sve signale koji odgovaraju onome što funkcija traži. Vrsta signala koju funkcija često može rukovati određena je varijablom poznatom kao maska signala, tako da se neki signali ne prosljeđuju rutinama koje nisu dizajnirane za rukovanje njima.
Druga vrsta programiranja signala uključuje program koji implementira red čekanja koji prihvaća dolazne signale. Ovaj red se proziva u glavnoj petlji izvršenja programa i program reagira kada signal uđe u red čekanja. Svaki signal se tada može logički sortirati, rukovati, zanemariti ili proslijediti drugom procesu.
Neke poteškoće mogu nastati u programiranju signala kada se koriste istovremeni procesi ili aplikacije s više niti. Komplikacije mogu nastati ako, na primjer, dvije odvojene niti osluškuju signale koje generiraju dva odvojena korisnička ulazna uređaja ili iz dvije mrežne utičnice. Ako dva korisnika istovremeno pokušaju izvršiti promjenu nekih podataka, tada bi podaci programa mogli ispasti iz sinkronizacije i svakom korisniku izgledati drugačije. Korištenje linearnog reda čekanja ili implementacija metoda sinkronizacije niti može pomoći u sprječavanju ove situacije.