J'ai déployé un projet MATLAB dans une DLL, à appeler à partir de C++, et cela fonctionne très bien. Jours heureux.Comment annuler une fonction de fichier m MATLAB à partir de C/C++?
Mais que se passe-t-il lorsque l'utilisateur demande d'annuler une opération? J'ai essayé de créer une variable global
nommée UserAborted
. Je l'initialise à 0 avant d'exécuter la longue fonction dans MATLAB. J'ai écrit aussi les deux fonctions suivantes:
function AbortIfUserRequested
global UserAborted
if (UserAborted == 1)
error('User Abort');
end
end
function UserAbortLongFunction
global UserAborted
UserAborted = 1;
end
Je demande à AbortIfUserRequested
dans chaque itération de la boucle dans ma longue fonction. J'ai également exporté UserAbortLongFunction
.
Je m'attendais à ce que peu de temps après appelé UserAbortLongFunction
, la fonction longue atteindrait un appel à AbortIfUserRequested
, et lancer une erreur. Au lieu de cela, la fonction longue continue à fonctionner jusqu'à la fin, et seulement puis change la valeur de UserAborted
.
Tout ce que je veux faire, c'est annuler cette longue fonction quand l'utilisateur me le demande! Y'a-t'il un quelconque moyen d'y arriver?
Matlab est monothread du point de vue du code M. Comment appelez-vous UserAbortLongFunction? Est-ce que UserAbortLongFunction retourne pendant que l'opération longue est toujours en cours ou bloque? –
L'appel de 'UserAbortLongFunction' ne bloque pas, et retourne immédiatement. Je ne suis pas sûr que ce soit un problème de code M; J'ai essayé d'exécuter 'UserAbortLongFunction' à partir de la ligne de commande dans MATLAB pendant que la fonction longue était en cours d'exécution. J'ai aussi eu la fonction longue imprimer la valeur de 'UserAborted' dans le cadre de son fonctionnement, à de nombreux points dans le code. Il est resté 0 jusqu'à la fin de la longue fonction, longtemps après avoir appelé 'UserAbortLongFunction'. – scraimer