„Signalų programavimas“ yra terminas, dažnai vartojamas kalbant apie kompiuterio programą, kuri pirmiausia veikia kaip reakcija į signalus arba įvykius, sugeneruotus dėl tam tikro būsenos pasikeitimo arba vartotojo įvesties. Beveik bet kuri kompiuterinės sistemos dalis – nuo išorinio įrenginio iki pačios operacinės sistemos – gali generuoti signalą, kurį programa gali užfiksuoti ir apdoroti. Daugeliu formų signalų programavimas primena įvykiais pagrįstą programavimą. Kai kurie dažniausiai naudojami signalų programavimo būdai yra grafinės vartotojo sąsajos, reaguojančios į vartotojo įvestį, tinklo ryšys ir žemo lygio programos, fiksuojančios ir apdorojančios konkrečius sistemos signalus.
Kompiuterių programavimo signalas gali būti apibrėžtas kaip pranešimas, įvykis arba pertraukimas, priklausomai nuo jo kilmės, sistemos architektūros ar net programuotojo pasirinkimo. Plačiąja prasme tai yra rodiklis, kad pasikeitė tam tikra būsena ar duomenų dalis, o kartais kartu pateikiama papildoma informacija apie įvykusį pokytį. Signalą gali generuoti vartotojas, kai paspaudžiamas klavišas, iš aparatinės įrangos, pvz., monitoriaus, kai įvyksta vertikalus atsekimas, arba net iš operacinės sistemos, kai paskirstant atmintį įvyksta kažkas, pavyzdžiui, puslapio gedimas.
Programoje signalų programavimas gali turėti kelių tipų architektūrą, tačiau viena iš labiausiai paplitusių yra klausytojo arba stebėtojo modelis. Taikant šį metodą, vartotojo apibrėžto kodo dalis gali būti tam tikru būdu perduodama signalų tvarkyklei, paprastai operacinėje sistemoje, kuri tada iškviečia tą kodo dalį, kad apdorotų visus signalus, atitinkančius tai, ko ieško funkcija. Signalo, kurį funkcija gali apdoroti, tipą dažnai lemia kintamasis, vadinamas signalo kauke, todėl kai kurie signalai neperduodami įprastoms programoms, kurios nėra skirtos jiems valdyti.
Antrasis signalų programavimo tipas apima programą, kuri įgyvendina eilę, kuri priima įeinančius signalus. Ši eilė yra apklausiama pagrindinėje programos vykdymo kilpoje ir programa reaguoja, kai į eilę patenka signalas. Tada kiekvienas signalas gali būti logiškai rūšiuojamas, tvarkomas, ignoruojamas arba perduodamas kitam procesui.
Kai naudojami vienu metu vykstantys procesai arba kelių gijų programos, signalų programavimo metu gali kilti tam tikrų sunkumų. Komplikacijų gali kilti, jei, pavyzdžiui, dvi atskiros gijos klauso signalų, generuojamų dviejų atskirų vartotojo įvesties įrenginių arba iš dviejų tinklo lizdų. Jei du vartotojai vienu metu bandys pakeisti kai kuriuos duomenis, programos duomenys gali iškristi iš sinchronizavimo ir kiekvienam vartotojui pasirodyti skirtingai. Linijinės eilės naudojimas arba gijų sinchronizavimo metodų įgyvendinimas gali padėti išvengti šios situacijos.