2011-01-31 1 views
1

Pour certains RTOS, il existe un événement, ou même une fonction de légende, qui est appelée lorsque le noyau bascule ou même quitte un thread. Dans pSOS, il s'appelait TaskSwitchCallout. Dans ce cas, nous aurions du code permettant d'incrémenter les compteurs, ce qui nous permettrait de savoir combien de temps CPU un thread prenait. Dans Qnx, vous pouvez vous abonner à un événement qui se produit lorsque le noyau a basculé dans une tâche et effectuer le même incrément de compteur.Comment obtenir la notification d'un changement de contexte dans Windows (7)

Existe-t-il un équivalent dans Windows? Souvent, sous Windows, nous ne pouvons pas déterminer quand exactement un contexte de thread a été activé ou désactivé par rapport aux autres threads en cours d'exécution dans le système (lire: code managé).

S'il vous plaît ne me demandez pas pourquoi j'essaie de faire cela, je ne peux pas en parler. Cependant, je peux dire que le compteur de changement de contexte dans Windows perfmon n'est pas suffisant. Mais je me dis que le compteur de changement de contexte dans perfmon doit obtenir ses informations de quelque part ... J'essaie d'y accéder quelque part par thread.

Merci!

+0

Je ne crois pas qu'il y ait une telle chose ... Windows est à proximité d'un rien RTOS et AFAIK il n'était tout simplement pas conçu pour envoyer une notification comme ça. (Il semble que cela ralentirait considérablement le système, non?) – Mehrdad

+0

Il y a [QueryThreadCycleTime] (http://msdn.microsoft.com/en-us/library/ms684943 (v = vs.85) .aspx) - cela aiderait-il? –

Répondre

1

Windows ne notifie pas les threads des commutateurs de contexte.

Si vous souhaitez obtenir des informations de cadencement, utilisez GetThreadTimes ou QueryThreadCycleTime ou l'un des compteurs de performance.

Sinon, vous pouvez faire usage de Windows 7 planificateur en mode utilisateur, de sorte que vous êtes en charge du contexte les commutateurs: User-mode scheduling

Questions connexes