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