将结构内的结构传递给GSourceFunc的最佳方法
问题描述:
哪种方式最好将S传递给GSourceFunc?或者既不?将结构内的结构传递给GSourceFunc的最佳方法
typedef struct{
//...
}S;
struct MS{
//..
S *St;
};
static gboolean AL_Calback(gpointer data){
S *St = (S*)user_data;
St->Something = SomethingElse;
return TRUE;
}
int main (int argc, char *argv[]){
//...
MS *MainStruct = gnew0(MS, 1);
Mainstruct->St = gnew0(S, 1);
clutter_threads_add_timeout_full(G_PRIORITY_HIGH, 100, AL_Callback, MainStruct->St, NULL);
//...
}
或类似这样的,
typedef struct{
//...
}S;
struct MS{
//..
S St;
};
static gboolean AL_Calback(gpointer data){
MS *MV = (MS*)user_data;
MV->S.something = SomethingElse;
return TRUE;
}
int main (int argc, char *argv[]){
//...
MS *MainStruct = gnew0(MS, 1);
clutter_threads_add_timeout_full(G_PRIORITY_HIGH, 100, AL_Callback, MainStruct, NULL);
//...
}
我试过其他的方法,但一直没能使其发挥作用。 clutter_add_timeout需要将指针作为参数。
答
如果通过指针传递参数到clutter_threads_add_timeout_Full
,那么你可以只通过的MainStruct
的St
构件从而减少动态分配的需要(对于内部结构)的地址。
struct MainStruct{
//..
S St; // note: no pointer
};
// in main
MainStruct* ms = gnew0(MS, 1);
clutter_threads_add_timeout_Full(G_PRIORITY_HIGH, 100, AL_Callback, &(ms->St),
NULL);
编辑:更新的代码动态分配MainStruct
结构,以避免可能的段错误如所指出的ptomato
'clutter_threads_add_timeout'不会缝让我过去什么,但一个gpointer,这其实只是'(无效*)'。 – MVTC
@MVTCplusplus - 然后只需在代码后忽略该句子。 a)有一个指针成员并传递该成员之间没有区别。和b)有一个struct成员并传递它的地址(内存分配除外) – Attila
谢谢。我还没有做任何测试,但我想你几乎回答了我的问题。 – MVTC