У меня есть сигналы «make» и «send», зарегистрированные в основном классе в основном потоке. Я вызываю call_make()
из пользовательского класса в том же потоке. call_make()
выполнит некоторую работу и получит данные из рабочего потока, а после возврата выдаст сигнал «make».
Это код класса пользователя
struct my_struct{
int cur_make_id;
int cur_send_id; //there may be many id's if multiple signals
}
void on_send_cb(core, gpointer data){
my_struct *user_data = (my_struct *) data;
printf("cure_make_id %d", user_data->cur_make_id); \\ this prints "4" everytime
printf("cure_send_id %d", user_data->cur_send_id); \\ this prints "2" everytime
}
void on_make_cb(core, gpointer data){
my_struct *user_data = (my_struct *) data;
printf("cure_make_id %d", user_data->cur_make_id); \\ this prints "4" everytime
for(int index=0;index<3;index++){
call_send();
user_data->cur_send_id = index;
g_signal_connect(core, "send", G_CALLBACK(on_send_cb), user_data );
}
}
void function(){
my_struct *user_data = g_malloc0(sizeof(my_struct));
for(int index=0;index<5;index++){
call_make();
user_data->cur_make_id = index;
g_signal_connect(core, "make", G_CALLBACK(on_make_cb), user_data );
}
}
Я ошибаюсь cur_make_id и cur_send_id для всех сигналов (получение последнего индекса для l oop)
Я знаю signal_emit и подключение задерживается и на l oop продвигается вперед. Я хочу знать, как я могу поделиться этим user_data с обратным вызовом, чтобы я мог знать, что этот обратный вызов предназначен для какого индекса?
(для простоты я сделал эти call_make()
api, я не могу изменить аргументы api )