Paso 1: código de
1) Descargar el archivo de código y wav adjunto a este paso (Código y Wav archivo.rar), éste es un archivo comprimido, necesitarás winzip o winrar para descomprimirlo. Nota: porque instructables se retarda ligeramente este archivo se descarga como algo parecido a FLSKW9EFHIK6H6V.tmp, por lo que tendrás que renombrarlo a something.rar (molesto, pero no es mi culpa).
2) salvar a ambos de estos (código y wav archivo) en el directorio de 'trabajo' de matlab (facilita las cosas)
3) abrir matlab
4) tipo en mex mythreadprog.cpp
4.5) Nota: si es la primera vez que utiliza el compilador de mex en matlab, tipo mex-setup antes paso 4 para elegir el compilador que desea utilizar.
5) cuando hago esto en mi matlab me sale una 'ADVERTENCIA de línea de comandos', pero él no efecto nada
6) tipo de hullo = 1, éste Inicializa una variable utilizada por el archivo de mex (si no haces este matlab caerá)
7) para ejecutar el tipo de archivo de mex en mythreadprog
8) en el prompt de matlab se verá Val #
donde # es el valor de hullo, oirá también el fichero wav jugar 7 veces, el tiempo entre cada reproducción del archivo wav (1 segundo * hullo), por lo que al escuchar el sonido que está siendo reproducido puede cambiar el valor de hullo (hullo = 5, casco = 3, etc.) y se puede oír el hilo de mex teniendo esto en cuenta (habrá pausas de diferente longitud como se cambia el valor de hullo de matlab)
Tenga en cuenta que matlab devuelve el control a usted imediately a pesar de que el hilo sigue funcionando en segundo plano.
9) Si desea que el subproceso para imprimir los valores cambiantes en el prompt de matlab puede descomentar _both_ de las líneas etiquetadas //---for prueba--- en el código
Nota: Si usted sólo Quite el comentario de la mexPrintf en el hilo y no el sueño en mexFunction matlab se estrellará. Esto es porque tienes que enviar una devolución de llamada a matlab después la mexFunction ha terminado. Si quieres tener el hilo de enviar información a matlab después la mexFunction ha dejado es más compicated (aka. No sé cómo, búscala en google).
#include < windows.h >
#include < stdlib.h >
#include < string.h >
#include < stdio.h >
#include < conio.h >
#include < process.h > //used para hilo
#include "mex.h"
#include < mmsystem.h > //used de sonido
#pragma Comentario (lib, "winmm.lib") //used de sonido
cdecl void MyThread(LPVOID pVoid);
//######################################################
### - función principal mex--###
//######################################################
void mexFunction (int nlhs, mxArray * plhs,
int nrhs, *prhs[]) mxArray
{
int ThreadNr; para el hilo
iniciar su cadena de
_beginthread (MyThread, 0 & ThreadNr);
---para probar---
Sleep(20000); hará la función de mex permanecer alrededor de 20 segundos para que pueda ver el mexPrintfs del hilo Si quieres
}
//################################################
//##########--Thread Code--#########################
//################################################
void cdecl MyThread(LPVOID pVoid)
{
declarar tus variables/indicadores
int x = 0; se usa para ajustar el número de mientras bucles
const mxArray * MiArray; utiliza para ayudar a extraer el valor de su variable de matlab
doble * TempPointer; utiliza para ayudar a extraer el valor de su variable de matlab
Val doble; contiene el valor de la variable de matlab
---Configurar tus punteros antes de entrar en el bucle de hilo, de esta manera que no tenemos que hablar
---a matlab en una vez entrar en el hilo (que simplemente accederán el matlab
---localización de memoria de variables). Esto es útil porque muchos realmente rápida comunicación con
---matlab lo puede fallar.
obtener un puntero a un puntero a la variable hullo (que se debe inicializar en matlab antes de ejecutar este prog)
MiArray = mexGetVariablePtr ("base", "hullo"); puede ser llamada base o global
obtener el valor de la variable hullo de los punteros, almacén en Val
TempPointer = mxGetPr(myarray);
while(x<10)
{
x ++;
Aquí estamos accediendo a ubicación de memoria de la variable matlab sin tener que hablar con matlab
Val = * TempPointer;
reproducir un sonido
PlaySound ("alleluia.wav", NULL, SND_FILENAME | SND_SYNC);
Espere entre sonidos Val segundos
Sleep(1000*Val);
---para probar---
mexPrintf("Val:%f", Val);
}
}