Je crée une DLL qui doit répondre aux demandes d'une application. L'une des exigences de l'application est qu'un appel ne devrait pas tarder à se terminer.Comment éviter le blocage (C++, Win32)
Say, j'ai une fonction foo(), qui est appelée par l'application hôte:
int foo(arg){
// some code i need to execute, say,
LengthyRoutine();
return 0;
}
Disons que, foo doit effectuer une tâche (ou appeler une fonction) qui est certain de prendre Longtemps. L'application me permet de définir une variable d'attente; si cette variable est différente de zéro lorsque foo retourne, elle appelle foo encore et encore (réinitialisation de la variable wait avant chaque appel) jusqu'à ce que wait soit retourné 0.
Quelle est la meilleure approche?
Est-ce que je vais:
int foo(arg){
if (inRoutine == TRUE) {
wait = 1;
return 0;
} else {
if (doRoutine == TRUE) {
LengthyRoutine();
return 0;
}
}
return 0;
}
Cela ne résout pas vraiment le problème que LengthyRoutine va prendre beaucoup de temps pour terminer. Dois-je générer un thread qui met à jour inRoutine selon qu'il a terminé ou non sa tâche?
Merci ..
Merci Eric. Je n'ai jamais essayé de faire des fils auparavant et je sens que c'est assez difficile à obtenir. Je vais donner un coup de feu :) – krebstar
C'est absolument la meilleure option, mais comme Eric l'a dit, faites attention à la synchronisation des threads – RobS
Je ne suis pas encore au courant des problèmes de synchronisation de thread pour le moment. Je n'ai besoin que d'un thread de travail unique qui exécute la routine, met à jour les variables d'état à certains moments de l'exécution. L'application appelante vérifie ensuite périodiquement ces variables pour savoir quoi faire. Est-ce correct? Y a-t-il ... – krebstar