O Código a seguir apresenta uma demonstração simples de uso de programação multi-thread
na linguagem C. A plataforma utilizada é a gcc em ambiente Windows 7.
//== Inicio do código ===================================================
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
//== principal include para uso de threads na plataforma Windows ========
#include <windows.h>
//== uma função qualquer para ser acessada da thread secundária =========
double tarefa( int i, double j )
{
return (i * j);
}
//== estrutura de dados para passagem de argumentos ====================
typedef struct {
int a;
double b;
double (*task)( int, double );
} DataArgs;
//== função para a thread secundária ===================================
DWORD WINAPI MyThreadFunction( LPVOID lpParam )
{
DataArgs *args = (DataArgs *)lpParam;
int z;
FILE *fh = fopen( "k:/log.txt", "w" );
for ( z=0; z<1000; z++ )
{
double resultado = args->task( args->a+z, args->b );
fprintf( fh, "\nThread SECUNDARIA: %d\t%f", z,resultado );
}
fclose ( fh );
return 0;
}
//== thread main =======================================================
int main()
{
int x;
// declaração de estrutura de dados para servirem como argumentos
// para a função da thread secundária
DataArgs dados;
dados.a = 20;
dados.b = 3.141592;
dados.task = tarefa;
HANDLE hThreadArray;
DWORD dwThreadIdArray;
// criação da thread secundária
hThreadArray = CreateThread(
NULL, // default security attributes
0, // use default stack size
MyThreadFunction, // thread function name
&dados, // argument to thread function
0, // use default creation flags
&dwThreadIdArray ); // returns the thread identifier
if ( hThreadArray == NULL )
{
puts( "\nErro ao criar Thread.\n" );
return 1;
}
// outras coisas da thread main
for (x=0; x < 1000000; x ++)
{
printf( "\nThread MAIN: %f", sqrt( x ) );
}
return 0;
}
//== fim do código ====================================================
Links de referência:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms682516(v=vs.85).aspx
https://msdn.microsoft.com/en-us/library/windows/desktop/ms682512(v=vs.85).aspx
Bom estudo e até a próxima.
Nenhum comentário:
Postar um comentário