Простенький пример показывающий как работать с потоками на языке Си\С++. Реализуемая задача: создается пять потоков, в каждый из потоков передается случайное число от 1 до 9, поток выводит на экран переданное значение, спит одну секунду, уменьшает значение на единицу и т.д. пока значение числа не будет равно нулю. После завершения выводится время завершения каждого потока. Code #include <stdlib.h> #include <stdio.h> #include <pthread.h> // подключаем библиотеку для работы с потоками #include <time.h> // библиотека для работы с функцией времени #include <errno.h>
int i=0,flag=-1; pthread_t thread[5]; // объявление пяти потоков
void*potok(void*arg) // функция для вызова в потоках void* - обязателный // тип возврата для функции, и тип аргумента { flag++; int tmp = (int) arg; // преобразуем void* в int int tmp2 = tmp; while(tmp>0) { printf("\tMax(%d)=%d\n ",tmp2,tmp); sleep(1); // спим одну секунду tmp--; } return (void*)time(NULL); //возвращаем время завершения потока, // преобразование к типу void* обязательно }
int main() { int a; time_t t; // объявление переменной для хранения значения времени // завершения потока for(i=0;i<5;i++) { a=rand()%10; // генерация случайного числа от 1 до 9 pthread_create(&thread[i],NULL,potok,(void*)a); // создание потоков } for(i=0;i<5;i++) { pthread_join(thread[i],(void*)&t); // считываем return с потоков printf("\nPotok %d ending at %s",i+1,ctime(&t)); // преобразуем время в // char и выводим на экран } printf("\n"); return 0; }
|