问题描述
我会尽力使其尽可能短。 我正在制作一个使用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 (将#修改为@)