Stap 1: code
1) download de code en wav bestand is gekoppeld aan deze stap (Code en Wav-File.rar), dit is een gecomprimeerd bestand, moet u winzip of winrar te decomprimeren. Opmerking: omdat instructables is enigszins achterlijk dit bestand wordt gedownload als iets als FLSKW9EFHIK6H6V.tmp, dus je hernoem het naar something.rar moet (vervelend, maar niet mijn schuld).
2) Sla beide van deze (code en wav-bestand) in uw matlab 'werk' directory (maakt dingen makkelijker)
3) open matlab
4) Typ in mex mythreadprog.cpp
4.5) Opmerking: als dit de eerste keer dat u gebruikmaakt van de mex-compiler in matlab is, typt u mex-setup vóór stap 4 om te kiezen van de compiler die u wilt gebruiken.
5) wanneer mij zulks op mijn matlab verrichten ik krijg een 'command line waarschuwing', maar op om het even wat niet uitwerking
6) type in hullo = 1, dit initialiseert een variabele door het mex-bestand gebruikt (als je niet doen zal dit matlab crash)
7) in te voeren het bestandstype mex mythreadprog
8) op de matlab-prompt ziet u Val #
Indien # is de waarde van Hallo, hoort u ook het wav-bestand afspelen 7 keer, de tijd tussen elke afspelen van het wav-bestand is (1 seconde * hullo), dus als u hoort het geluid wordt afgespeeld kunt u de waarde van hullo (hullo = 5, romp = 3, enz) en hoor je de draad van de mex dit rekening houdend met (er zullen verschillende lengte pauzes als u de waarde van de hullo in matlab wijzigt)
Merk op dat matlab besturingselement herstelt u onmiddellijk ook al de wol nog steeds op de achtergrond wordt uitgevoerd.
9) als u wilt dat de wol om de veranderende waarden bij de matlab-prompt kunt u _both_ van de lijnen labelled //---for testen--- in de code uncomment
Opmerking: als u alleen de mexPrintf in de thread en niet de slaap in de mexFunction matlab uncomment zal verpletteren. Dit komt doordat waarnaar een retouraanroep matlab verzendt je na beëindiging van de mexFunction. Als u wilt dat de draad terug te sturen informatie naar matlab nadat de mexFunction is gestopt met er meer compicated (aka. Ik weet niet hoe het opzoeken op google).
#include < windows.h >
#include < stdlib.h >
#include < string.h >
#include < stdio.h >
#include < conio.h >
#include < process.h > //used voor draad
#include "mex.h"
#include < mmsystem.h > //used voor geluid
#pragma commentaar (lib, "winmm.lib") //used voor geluid
VOID cdecl MyThread(LPVOID pVoid);
//######################################################
###--belangrijkste mex functie--###
//######################################################
VOID mexFunction (int nlhs, mxArray * plhs,
int nrhs, mxArray *prhs[])
{
int ThreadNr; nodig voor de thread
Start uw draad
_beginthread (MyThread, 0, & ThreadNr);
---voor het testen van---
Sleep(20000); zal de functie van de mex rond verblijf voor 20 seconden, zodat u zien de mexPrintfs van de wol, kunt indien gewenst
}
//################################################
//##########--Thread Code--#########################
//################################################
VOID cdecl MyThread(LPVOID pVoid)
{
declareren van variabelen/aanwijzers
int x = 0; gebruikt om # of terwijl loops
Const mxArray * myarray; gebruikt om te helpen met het ophalen van de waarde van de variabele van uw matlab
dubbele * TempPointer; gebruikt om te helpen met het ophalen van de waarde van de variabele van uw matlab
dubbele Val; bevat de waarde van uw variabele matlab
---Setup aanwijzers alvorens de thread's lus, op deze manier zullen we niet om te praten
---tot matlab helemaal zodra we de draad (we zullen worden gewoon toegang tot de matlab
---variabelen geheugenlocatie). Dit is nuttig omdat een heleboel echt snelle communicatie met
---matlab kan het crashen.
krijgen van een pointer naar een pointer naar de hullo-variabele (die u dient in matlab initialiseren voordat u dit prog)
myarray = mexGetVariablePtr ("base", "Hallo"); base-beller kan worden of globale
van de hullo variabele waarde krijgen van de pointers, opslaan in de Val
TempPointer = mxGetPr(myarray);
while(x<10)
{
x ++;
Hier zijn we toegang tot de geheugenlocatie van de variabele van de matlab zonder te praten met matlab
Val = * TempPointer;
een geluid afspelen
PlaySound ("alleluia.wav", NULL, SND_FILENAME | SND_SYNC);
wacht Val seconden tussen geluiden
Sleep(1000*val);
---voor het testen van---
mexPrintf("Val:%f", Val);
}
}