gpt4 book ai didi

c - 当函数的指针存储在结构体中时如何调用函数

转载 作者:行者123 更新时间:2023-11-30 15:21:30 26 4
gpt4 key购买 nike

如何调用以下示例中的函数。

我有一个结构

struct Timing_Thread_Struct {
int SleepTime;
void (*Timing_Function)(int);
};

我有一个函数可以填充结构并创建一个线程

struct Timing_Thread_Struct timing_struct;
timing_struct.SleepTime = 30;
timing_struct.Timing_Function = ExampleFunction;
pthread_create(&delay_thread, NULL, Delay_Thread_Function, (void *)&timing_struct);
pthread_detach( delay_thread);

示例函数是

void ExampleFunction(int event) {
//Turn on a digital channel
}

最后是我的 Delay_Thread_Function

void *Delay_Thread_Function(void *arguments)
{
struct Timing_Thread_Struct *timing_struct = arguments;
msleep(timing_struct -> SleepTime );

//How do i call the function here?

pthread_exit(NULL);
return NULL;
}

如何调用存储在结构中的函数?

我已经尝试过

timing_struct->Timing_Function(1);

它就崩溃了。

谢谢

最佳答案

线程a创建struct Timing_Thread_Structtiming_struct;并启动线程b,然后返回,销毁timing_struct的过程。线程b尝试访问timing_struct,它被破坏,并因此得到垃圾。假设 timing_struct 的持续时间比在其下面创建的线程持续时间更长是一个常见的错误。

这可能可以通过使用 pthread_join 暂停调用线程的执行来解决。

关于c - 当函数的指针存储在结构体中时如何调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29560185/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com