Je préfère que ce soit un commentaire mais qu'il faut trop de caractères. Quoi qu'il en soit, ozgur, à en juger par les questions dans vos réponses aux commentaires, vous semblez manquer le point que vous ne pouvez pas simplement dire que mon fil prend autant de temps à fonctionner et s'attendre à ce qu'il fonctionne comme par magie avec d'autres threads, tout cela grâce au système d'exploitation. Vous devez concevoir vos threads et les analyser pour les performances les plus défavorables. Si le pire des cas ne répond pas à vos exigences, vous devez repenser vos threads.
Donc, plutôt que de simplement dire que le thread 1 prend 10 ms pour terminer et que le thread 2 prend 20 ms, vous devez également dire que le thread 1 doit s'exécuter toutes les 15 ms. le thread 2 doit s'exécuter toutes les 40 ms. le thread 3 doit s'exécuter toutes les 500 ms, le threadN doit s'exécuter toutes les 1500 ms. Ensuite, vous allouez le temps nécessaire à l'exécution de chaque thread dans le pire des cas. Vous mettez tout cela ensemble, identifiez les pires scénarios possibles, puis vous devez vous assurer que chaque thread répond à ses exigences de synchronisation. Cette analyse est également l'endroit où vous identifiez si certains threads doivent avoir une priorité plus élevée que d'autres afin de répondre à leurs exigences de synchronisation.
Par exemple, thread5 est en cours d'exécution est interrompu par le thread 4 qui est interrompu par le thread 3 qui est interrompu par threadN pourrait être le pire des cas. Vous mettez tout cela sur une chronologie et vérifiez que même dans le pire des cas, chaque thread répond à ses exigences de synchronisation. Vous pouvez vous assurer que les threads terminent ce pire scénario de manière déterministe en utilisant le planificateur et les priorités dans un système d'exploitation en temps réel. Ce déterminisme est ce qui fait un système d'exploitation en temps réel.
Si vous faites des threads la même priorité, vous avez perdu une partie (sinon la totalité) de ce déterminisme car le planificateur peut être libre de choisir le thread qu'il souhaite exécuter ensuite.
Dans un système d'exploitation comme Windows, non seulement vous ne pouvez pas spécifier quand chaque thread s'exécutera, vous ne pouvez même pas garantir que votre application sera exécutée à tout moment. Le système d'exploitation peut arrêter votre application et exécuter un service d'arrière-plan à tout moment. En d'autres termes, il n'y a pas de déterminisme. Ainsi, Windows n'est pas un système d'exploitation en temps réel. Bien que, si vos exigences de synchronisation sont grandes, comme (thread1 s'exécute toutes les 10 secondes, thread2 s'exécute toutes les 15 secondes), vous pouvez essentiellement traiter Windows comme un système d'exploitation en temps réel tant que vous tenez compte de la pente et environ toutes les 10 ou 15 secondes (donner ou prendre quelques centaines de millisecondes et une fenêtre manquée occasionnelle) est assez bon.