1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
#include "mex.h"
#include <windows.h>
#include <stdio.h>
#include <process.h>
#include <string.h>
unsigned Counter = 0;
unsigned Counter_1 = 0;
unsigned __stdcall SecondThreadFunc( void* pArguments )
{
if( strcmp( (char*)pArguments,"Init" ) )
Counter = 12;
else
{
while ( Counter < 1000000 )
Counter++;
}
_endthreadex(0);
return 0;
}
unsigned __stdcall ThirdThreadFunc( void* pArguments )
{
if( strcmp( (char*)pArguments,"Init" ) )
Counter_1 = 12;
else
{
while ( Counter < 1000000 )
Counter_1++;
}
_endthreadex(0);
return 0;
}
void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
{
HANDLE hThreads[2];
unsigned threadID[2];
char *cmd;
char *cmd1;
//On vérifie que l'argument soit une chaîne de caractères
if( nrhs != 2 )
mexErrMsgTxt( "Two input required" );
if( !mxArrayToString( prhs[0] ) )
mexErrMsgTxt( "Input must be a string" );
//On récupère la chaîne de caractères
cmd = mxArrayToString( prhs[0] );
cmd1 = mxArrayToString( prhs[1] );
printf( "Creating second thread...\n" );
//Create the second thread.
//Create the third thread.
hThreads[0] = (HANDLE)_beginthreadex( NULL, 0, &SecondThreadFunc, cmd, 0, &threadID[0] );
hThreads[1] = (HANDLE)_beginthreadex( NULL, 0, &ThirdThreadFunc, cmd1, 0, &threadID[1] );
WaitForMultipleObjects(2,hThreads,TRUE,INFINITE);
printf( "Counters should be 1000000; first is -> %d\n", Counter );
printf( "Counters should be 1000000; first is -> %d\n", Counter_1 );
CloseHandle( hThreads[0] );
CloseHandle( hThreads[1] );
mxFree(cmd);
mxFree(cmd1);
} |
Partager