“Signaaliohjelmointi” on termi, jota käytetään usein viittaamaan tietokoneohjelmaan, joka toimii pääasiassa vastauksena signaaleihin tai tapahtumiin, jotka ovat syntyneet jonkin tilanmuutoksen tai käyttäjän syöttämien tietojen perusteella. Lähes mikä tahansa tietokonejärjestelmän osa oheislaitteesta käyttöjärjestelmään voi tuottaa signaalin, jonka sovellus voi kaapata ja sitten käsitellä. Signaaliohjelmointi muistuttaa monissa muodoissa tapahtumapohjaista ohjelmointia. Jotkut signaalin ohjelmoinnin yleisimmistä käyttötarkoituksista ovat graafiset käyttöliittymät, jotka vastaavat käyttäjän syötteisiin, verkkoviestintä ja matalan tason ohjelmat, jotka sieppaavat ja käsittelevät tiettyjä järjestelmän signaaleja.
Tietokoneohjelmoinnin signaali voidaan määritellä sanomaksi, tapahtumaksi tai keskeytykseksi sen alkuperästä, järjestelmäarkkitehtuurista tai jopa ohjelmoijan mieltymyksistä riippuen. Laajemmin sanottuna se on osoitus siitä, että jokin tila tai tieto on muuttunut, ja siihen liittyy joskus lisätietoja tapahtuneesta muutoksesta. Käyttäjä voi tuottaa signaalin, kun näppäintä painetaan, laitteistosta, kuten näytöstä, kun pystysuora paluu tapahtuu, tai jopa käyttöjärjestelmästä, kun muistin varauksen aikana tapahtuu jotain, kuten sivuvika.
Sovelluksen sisällä signaaliohjelmointi voi ottaa käyttöön monentyyppisiä arkkitehtuureja, mutta yksi yleisimmistä on kuuntelija- tai tarkkailijamalli. Tässä menetelmässä pala käyttäjän määrittämää koodia voidaan välittää jollakin tavalla signaalinkäsittelijälle, yleensä käyttöjärjestelmässä, joka sitten kutsuu kyseisen koodin palaamaan signaaleja, jotka vastaavat toimintoa. Toiminnon käsittelemän signaalin tyypin määrää muuttuja, joka tunnetaan signaalimaskina, joten joitakin signaaleja ei välitetä rutiineihin, joita ei ole suunniteltu käsittelemään niitä.
Toinen signaaliohjelmointityyppi sisältää ohjelman, joka toteuttaa jonon, joka hyväksyy saapuvat signaalit. Tämä jono haastetaan ohjelman pääsuorituskiertoon ja ohjelma reagoi, kun signaali tulee jonoon. Jokainen signaali voidaan sitten loogisesti lajitella, käsitellä, jättää huomiotta tai siirtää toiselle prosessille.
Signaaliohjelmoinnissa voi esiintyä vaikeuksia, kun käytetään samanaikaisia prosesseja tai monisäikeisiä sovelluksia. Komplikaatioita voi syntyä, jos esimerkiksi kaksi erillistä säiettä kuuntelee kahden erillisen käyttäjän syöttölaitteen tai kahden verkkoliittimen tuottamia signaaleja. Jos kaksi käyttäjää yrittää samanaikaisesti tehdä muutoksia joihinkin tietoihin, ohjelmatiedot saattavat pudota synkronoinnista ja näkyä eri tavalla jokaiselle käyttäjälle. Lineaarisen jonon käyttäminen tai säikeiden synkronointimenetelmien käyttöönotto voi auttaa estämään tämän tilanteen.