MATLAB multitrådning, EASY (1 / 1 steg)
Steg 1: kod
1) Ladda ner koden och wav filen bifogas detta steg (Kod och Wav File.rar), det är en komprimerad fil, du behöver winzip eller winrar för att packa upp den. Obs: eftersom instructables är lite efterbliven denna fil kommer att ladda ner som något liknande FLSKW9EFHIK6H6V.tmp, så du måste byta namn på den till something.rar (irriterande, men inte mitt fel).
2) spara båda dessa (kod och wav-fil) i katalogen matlab "arbete" (gör saker lättare)
3) öppna matlab
4) skriver i mex mythreadprog.cpp
4.5) OBS: om detta är första gången du använder mex kompilatorn i matlab, skriver mex-setup innan steg 4 för att välja den kompilator som du vill använda.
5) när jag gör detta på min matlab jag få en "befalla lina varning", men det påverka inte någonting
6) typ i hullo = 1, denna initieras en variabel används av mex-fil (om du inte gör detta matlab kommer krascha)
7) att köra mex arkivet skriva på maskin i mythreadprog
8) på matlab prompten visas Val #
där # är värdet av hullo, du kommer också att höra wav-fil spela 7 gånger, är tiden mellan varje uppspelning av wav-fil (1 sekund * hullo), så när du hör ljudet som spelas kan du ändra värdet för hullo (hullo = 5, hull = 3, etc) och du kan höra mex tråden med hänsyn till detta (det kommer att finnas olika långa pauser när du ändrar hullo värdet i matlab)
Observera att matlab returnerar kontroll att du omedelbart även om tråden är fortfarande igång i bakgrunden.
9) om du vill att tråden att skriva ut de förändrade värdena vid matlab: s prompten du kan ta bort kommentar _both_ av linjer märkt //---for testning--- i koden
Obs: om du bara avkommentera mexPrintf i tråden och inte sova i mexFunction matlab kommer att krascha. Detta beror på att du ska skicka en callback till matlab efter att mexFunction avslutats. Om du vill ha tråden skicka information tillbaka till matlab efter mexFunction har slutat är det mer compicated (aka. Jag vet inte hur, slå upp det på google).
#include < windows.h >
#include < stdlib.h >
#include < string.h >
#include < stdio.h >
#include < conio.h >
#include < process.h > //used för tråd
#include "mex.h"
#include < mmsystem.h > //used för ljud
#pragma kommentar (lib, "winmm.lib") //used för ljud
void cdecl MyThread(LPVOID pVoid);
//######################################################
###--huvudsakliga mex funktion--###
//######################################################
void mexFunction (int nlhs, mxArray * plhs,
int nrhs, mxArray *prhs[])
{
int ThreadNr; behövs för tråden
starta din tråd
_beginthread (MyThread, 0, & ThreadNr);
---för att testa---
Sleep(20000); kommer att göra funktionen mex bo runt i 20 sekunder så du kan se mexPrintfs i tråden om du vill
}
//################################################
//##########--Thread Code--#########################
//################################################
void cdecl MyThread(LPVOID pVoid)
{
deklarera variabler/pekare
int x = 0; används för att justera # av medan loopar
CONST mxArray * myarray; används för att extrahera din matlab variabelns värde
Dubbelrum * TempPointer; används för att extrahera din matlab variabelns värde
dubbel Val; håller din matlab variabelns värde
---Setup pekare innan du anger trådens ögla, på detta sätt som vi inte behöver prata
---till matlab alls när vi går in i tråden (vi kommer att helt enkelt att komma åt matlab
---variabler minnesplats). Detta är användbart eftersom en hel del riktigt snabb kommunikation med
---matlab kan krascha det.
få en pekare till en pekare till variabeln hullo (som du ska initiera i matlab innan du kör detta prog)
myarray = mexGetVariablePtr ("bas", "hullo"); kan vara bas som ringer eller global
får hullo variabelns värde från pekarna, förvara den i Val
TempPointer = mxGetPr(myarray);
While(x<10)
{
x ++;
Här har vi tillgång till matlab variabelns minnesplats utan att behöva prata med matlab
Val = * TempPointer;
spela upp ett ljud
PlaySound ("alleluia.wav", NULL, SND_FILENAME | SND_SYNC);
vänta mellan ljud Val sekunder
Sleep(1000*val);
---för att testa---
mexPrintf("Val:%f", Val);
}
}