Preferirei che questo fosse un commento ma ci vogliono troppi personaggi. Comunque, ozgur, a giudicare dalle domande nelle tue risposte ai commenti, sembra che manchi il punto che non puoi semplicemente dire che il mio thread impiega così tanto tempo a funzionare e si aspetta che funzioni magicamente insieme ad altri thread grazie al sistema operativo. Devi progettare i tuoi thread e analizzarli per le prestazioni peggiori. Se il caso peggiore non soddisfa i tuoi requisiti, devi riprogettare i tuoi thread.
Quindi, invece di dire semplicemente che il thread 1 richiede 10 ms per il completamento e il thread 2 richiede 20 ms, devi anche dire che il thread 1 deve essere eseguito ogni 15 ms. il thread 2 deve essere eseguito ogni 40 ms. il thread 3 deve essere eseguito ogni 500 ms, il threadN deve essere eseguito ogni 1500 ms. Quindi si assegna il tempo necessario per completare ogni thread nello scenario peggiore. Metti tutto insieme, identifichi i peggiori scenari possibili e quindi devi assicurarti che ogni thread soddisfi i suoi requisiti di tempistica. Questa analisi consente inoltre di identificare se alcuni thread devono avere una priorità più alta rispetto ad altri per soddisfare i loro requisiti di temporizzazione.
Ad esempio, il thread 5 in esecuzione viene interrotto dal thread 4 che viene interrotto dal thread 3 che viene interrotto dal thread N potrebbe essere uno scenario peggiore. Metti tutto questo su una linea temporale e verifichi che anche nel peggiore dei casi ogni thread soddisfa i suoi requisiti di temporizzazione. Puoi assicurarti che i thread completino questo scenario peggiore in modo deterministico usando lo scheduler e le priorità in un sistema operativo in tempo reale. Questo determinismo è ciò che rende un sistema operativo in tempo reale.
Se rendi i thread la stessa priorità, allora hai perso parte (se non tutto) di quel determinismo perché lo scheduler potrebbe essere libero di scegliere il thread che vuole eseguire successivamente.
In un sistema operativo come Windows, non solo non è possibile specificare quando verrà eseguito ciascun thread, ma non è nemmeno possibile garantire che l'applicazione verrà eseguita in qualsiasi momento. Il sistema operativo potrebbe arrestare l'applicazione ed eseguire alcuni servizi in background ogni volta che lo desidera. In altre parole, non c'è determinismo. Pertanto, Windows non è un sistema operativo in tempo reale. Anche se, se i tuoi requisiti di temporizzazione sono grandi, come (thread1 viene eseguito ogni 10 secondi, thread2 viene eseguito ogni 15 secondi), puoi essenzialmente trattare Windows come un sistema operativo in tempo reale purché tu tenga conto dello slop e circa ogni 10 o 15 secondi (dare o prendere alcune centinaia di millisecondi e una finestra saltata occasionale) è abbastanza buono.