Étape 1: code
1) Télécharger le fichier de code et wav attaché à cette étape (Code et Wav File.rar), il s’agit d’un fichier compressé, vous aurez besoin de winzip ou winrar pour le décompresser. NOTE : parce qu’instructables est légèrement retardé ce fichier va télécharger quelque chose comme FLSKW9EFHIK6H6V.tmp, donc vous n’avez pas de le renommer en something.rar (ennuyeux, mais pas de ma faute).
2) Enregistrez tous les deux de ces (fichier code et wav) dans votre répertoire de "travail" de matlab (facilite les choses)
3) ouvrir matlab
4) tapez dans mex mythreadprog.cpp
4,5) NOTE : si c’est la première fois que vous utilisez le compilateur de mex dans matlab, tapez mex-installation avant l’étape 4 pour choisir le compilateur que vous souhaitez utiliser.
5) quand je fais cela sur mon matlab je reçois un « avertissement de ligne de commande », mais il n’est pas l’effet sur n’importe quoi
6) type dans hullo = 1, ceci Initialise une variable utilisée par le fichier mex (si vous ne faites pas cette matlab plantera)
7) pour exécuter le type de fichier mex dans mythreadprog
8) à l’invite de matlab, vous verrez Val #
où # est la valeur de hullo, vous entendrez aussi le fichier wav jouer 7 fois, le temps entre chaque lecture du fichier wav est (1 seconde * hullo), donc dès que vous entendez le son en cours de lecture, vous pouvez modifier la valeur de hullo (hullo = 5, coque = 3, etc.) et vous pouvez entendre le thread mex compte tenu de cela (il y aura différentes longueurs pauses lorsque vous changez la valeur de hullo dans matlab)
Notez que matlab retourne le contrôle à vous immédiatement même si le thread s’exécute toujours en arrière-plan.
9) si vous voulez que le thread d’imprimer les valeurs de variables à l’invite de matlab vous pouvez décommenter _both_ de la lignes labled //---for test--- dans le code
Remarque : Si vous seulement décommentez la mexPrintf dans le thread et pas le sommeil dans le matlab mexFunction plantera. C’est parce que vous désirez envoyer un rappel à matlab après que la mexFunction est terminée. Si vous voulez que le thread d’envoyer des informations vers matlab après l’arrêt de la mexFunction c’est plus compicated (aka. Je ne sais pas comment, il chercher sur google).
#include < windows.h >
#include < stdlib.h > à
#include < string.h >
#include < stdio.h >
#include < conio.h >
#include < process.h > //used pour thread
#include « mex.h »
#include < mmsystem.h > //used pour son
#pragma comment (lib, « winmm.lib ») //used pour son
cdecl Sub MyThread(LPVOID pVoid) ;
//######################################################
###--fonction mex principal--###
//######################################################
void mexFunction (int nlhs, mxArray * plhs,
int nrhs, mxArray *prhs[])
{
int ThreadNr ; nécessaire pour le thread
commencer votre thread
_beginthread (le MyThread, 0, & ThreadNr) ;
---pour le test---
Sleep(20000) ; fera la fonction mex à rester autour pendant 20 secondes, donc vous pouvez voir le mexPrintfs du fil, si vous voulez
}
//################################################
//##########--Thread Code--#########################
//################################################
cdecl Sub MyThread(LPVOID pVoid)
{
déclarez vos variables/pointeurs
int x = 0 ; permet de régler le nombre de tout en boucles
const mxArray * myarray ; utilisé pour aider à extraire la valeur de votre variable matlab
double * TempPointer ; utilisé pour aider à extraire la valeur de votre variable matlab
double Val ; contient la valeur de votre variable matlab
---Vos pointeurs de configuration avant d’entrer dans la boucle du thread, de cette façon, nous n’aurons pas de parler
---à matlab du tout une fois que nous entrons dans le thread (nous avons simplement accéderont matlab
---les emplacementmémoire variables). Cela est utile, car beaucoup de vraiment rapide communication avec
---matlab peut il tomber en panne.
obtenir un pointeur vers un pointeur vers la variable hullo (dont vous devez initialiser dans matlab avant d’exécuter ce prog)
myArray = mexGetVariablePtr (« base », "hullo") ; peut être la base appelant ou global
retire les pointeurs de valeur de la variable hullo, stockez-le dans Val
TempPointer = mxGetPr(myarray) ;
while(x<10)
{
x ++ ;
ici nous sommes accès à emplacement de mémoire de la variable matlab sans avoir à parler à matlab
Val = * TempPointer ;
émettre un signal sonore
PlaySound (« alleluia.wav », NULL, SND_FILENAME | SND_SYNC) ;
attendre entre sons Val secondes
Sleep(1000*Val) ;
---pour le test---
mexPrintf("Val:%f", Val) ;
}
}