Je suis en train de développer un simulateur de matériel informatique intégré par Visual Studio 2010 avec WINAPI. J'ai rencontré le problème quand j'ai essayé d'émuler l'interruption ... Le comportement d'interruption agit comme suit ... pendant qu'un threadA fonctionne et pendant ce temps il y a une interruption, ainsi le threadA sera maintenu et sautera pour exécuter la fonction ISR, après la fonction ISR a été fait, threadA peut reprendre et continuer à travailler ...MSDN simule le comportement d'interruption
J'ai essayé de simuler cette action par multithread donc il y a un fil appelé interruption thread, qui suspend threadA et faire la Opération ISR, puis reprendre threadA, tout comme le code ci-dessous ...
mais le problème est que ma morue e sera bloqué lors de l'appel de sespendthread() le printf ("a") précédent peut être vu, mais le printf ("b") ne peut pas ...
Existe-t-il d'autres façons de simuler une interruption avec MSDN? je considérais sur l'utilisation singals et SignalHandler pour résoudre cette question, mais il semble que le signal Windows ne peut pas être envoyé à la discussion spécifique, ne peut être envoyé à une procédure spécifique ...
HANDLE thd_main;
HANDLE thd_int;
HANDLE Array_Of_Thread[2];
thd_main(){
while(1){
/* polling for jobs and do specific operation */
}
}
thd_int(){
while(1){
if (WaitForSingleObject(g_timer, infinite) == WAIT_TIMEOUT){
printf("a");
suspendthread(thd_main);
printf("b");
/* ISR operation */
resumethread(thd_main);
}
}
}
int main()
{
thd_main = CreateThread(NULL, 0,
Thread_main, NULL, 0, NULL);
thd_int = CreateThread(NULL, 0,
Thread_int, NULL, 0, NULL);
Array_Of_Thread[0] = thd_main;
Array_Of_Thread[1] = thd_int;
WaitForMultipleObjects(3, Array_Of_Thread_Handles, TRUE, INFINITE);
closehandle(thd_main);
closehandle(thd_int);
return 0;
}