删除前一个Timer_t对象后创建新的Timer_t对象不起作用

问题描述

我会尽力使其尽可能短。 我正在制作一个使用C扩展(hw_timer)的python应用程序。 此扩展程序负责创建计时器。

Python应用程序通过调用hw_timer.StartTimer来实例化计时器对象。 之后,在无限循环内,Python继续调用hw_timer.ResetTimer和hw_timer.StartTimer。重置计时器实际上会破坏计时器,然后使用StartTimer等创建一个新计时器。

代码经过了几次更改,因为无论如何,每次尝试创建新计时器时,我都会不断遇到分段错误

但是现在的情况非常奇怪。

这是Python代码:您会注意到我删除了之前描述的无限循环,因为我想创建一个非常简单的方案来展示我的问题

Debug

这是输出

if __name__ == "__main__":
   timerPtr = hw_timer.StartTimer(os.getpid()) #start timer returns a tuple
   print("timer,tid,pid -> {}".format(timerPtr))
   print("Result of reset timer: {}".format(hw_timer.ResetTimer(timerPtr[0])))
   print("---------")
   time.sleep(10)
   timerPtr=hw_timer.StartTimer(os.getpid())
   print("timer,pid -> {}".format(timerPtr))
   print("Result of reset timer: {}".format(hw_timer.ResetTimer(timerPtr[0])))
   print("---------")
   time.sleep(10)

如您所见,尽管两次重复相同的代码,但是第二次系统方法time_delete在计算ResetTimer时仍然失败。

现在,以下是C代码(我已删除了尽可能多的Python.h相关内容,以使其更具可读性)

timer,pid -> (16985424,16598768,45975)
Result of reset timer: (16985424,45975)
---------
timer,pid -> (16598768,15553760,45975)
timer_delete: Invalid argument

现在认为_StartTimer的整个代码是正确的:它已经在项目的其他部分中用于纯C应用程序,实际上,计时器至少在第一次也可以在这里运行。

但是,这些东西到处都是:最初我有ResetTimer调用_StartTimer,但是每当我调用“ timer = new tmr_data()”时,我都会遇到分段错误,因此我开始认为整个计时器的实现可能有些棘手或容易出错。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)