вызовы многопоточности - PullRequest
0 голосов
/ 30 марта 2011

У меня есть массив структур с полями данных и полями с указателями на функции.

то, что я делаю сейчас, это циклически перебирает массив и вызывает каждую зарегистрированную функцию.

что янужно для каждого элемента в моем массиве структур зарегистрировать функцию вызова в отдельном независимом потоке.

Я также могу опубликовать пример кода, если это необходимо.извините за мой английский:)

почтовый код:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <pthread.h>

#define NTHREAD 3

struct server_t {
    char *name;

    int (*triggered)(struct server_t *);
};

typedef struct server_t server_t;

int triggered1(struct server_t * server)
{
    if  (time(NULL) % 1 == 0) {
        printf("%s\n", __FUNCTION__);
        pthread_exit(0);
        return 0;
    } else {
        return -1;
    }
}

int triggered2(struct server_t * server)
{
    if  (time(NULL) % 2 == 0) {
        printf("%s\n", __FUNCTION__);
        pthread_exit(0);
        return 0;
    } else {
        return -1;
    }
}

int triggered3(struct server_t * server)
{
    if  (time(NULL) % 5 == 0) {
        printf("%s\n", __FUNCTION__);
        pthread_exit(0);
        return 0;
    } else {
        return -1;
    }
}

int main()
{
    pthread_t threads[NTHREAD];
    int  iret[NTHREAD]; int i = 0;
    server_t servers[] = {
        {"server1", triggered1},
        {"server2", triggered2},
        {"server3", triggered3},
    };

    /* 
       So, i have an array of structures. AND i have a main loop. 
       i want to create thread for each element of array, pass 
       structure's "triggered" function as start routine for it. 
       AND i need this start routine to periodically check for something. 
       So below some kind of an em.. code, that supposed to be.
    */

    <create_threads(&servers);> // this function must create thread for each element of array
                                //with structure's "triggered" function as a start routine
                                //argument

    /* after what threads are running and checking what they needed in an infinite loop. */

   // ?maybe some code here?
    return 0;
}

1 Ответ

1 голос
/ 30 марта 2011

Вот очень хороший, базовый пример pthreads, который должен помочь вам: https://computing.llnl.gov/tutorials/pthreads/#CreatingThreads

По сути, все, что вам нужно сделать, - это перебрать массив функций-указателей и выполнить функции в соответствии суказанный пример.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...