2014-01-02 6 views
0

Мне нужно написать код C, используя libevent. Вкратце, что я ожидаю сделать. Из stdin персонаж будет проходить через in_read_cb. in_read_cb будет отправлен на адрес master_read_cb. master_read_cb будет отправлен в систему для обработки. Эти 2 функции устанавливаются libevent. Таким образом, тип переменной переходит к ним, это исправление.Как передать член структуры функции

void in_read_cb(struct bufferevent *bev, void *data) 
{ 
//do something 
} 

void master_read_cb(struct bufferevent *bev, void *data) 
{ 
//do something 
} 

Проблема заключается в том, мне нужно положить, что void *data в структуру, при добавлении новой переменной в качестве идентификатора для master_read_cb, когда начать обработку. Это выглядит примерно так:

typedef struct _new_data 
{ 
void *data; 
int start; 
} new_data; 

void in_read_cb(struct bufferevent *bev, struct new_data->data) 
{ 
//do something 
//when it meets a condition, new_data->start = 1; 
} 

void master_read_cb(struct bufferevent *bev, struct new_data->data) 
{ 
//check new_Data->start 
//will sent the character for processing if start = 1 
} 

Это совершенно неправильно из-за того, как я проходил функцию. Как я могу сделать это правильно?

+0

Просто передать 'data' элемент из структуры? Например. 'struct _new_data данные; in_read_cb (you_bev, data.data); ' –

+0

Вы передаете' void ** ', если вам нужно изменить элемент' data' структуры, т. е. 'master_read_cb (bev, & your_struct_instance-> data)'. Если вам нужно только изменить значение, то оно * указывает *, а затем просто передать указатель 'data'. –

+1

О, кстати, не имеют глобальных имен с ведущими подчеркиваниями, которые зарезервированы спецификацией. –

ответ

0

Вам нужно что-то вроде этого, и передать указатель на struct _new_data в них:

void in_read_cb(struct bufferevent *bev, void *new_data_ptr) 
{ 
    new_data *ndata = new_data_ptr; 
    //do something 
    //when it meets a condition, ndata->start = 1; 
} 

void master_read_cb(struct bufferevent *bev, void *new_data_ptr) 
{ 
    new_data *ndata = new_data_ptr; 
    //check ndata->start 
    //will sent the character for processing if start = 1 
}