HY,
我正在编写我的第一个Qt程序,现在遇到麻烦:
QObject :: killTimer:无法从另一个线程停止计时器
QObject :: startTimer:无法从另一个线程启动计时器
我的程序将与CANOpen总线通信,因为我正在使用Canfestival Stack.Canfestival将使用回调方法.为了检测通信中的超时,我设置了一个定时器功能(以某种方式像看门狗).我的计时器包由"tmr"模块,"TimerForFWUpgrade"模块和"SingleTimer"模块组成."tmr"模块最初是C编程的,因此静态"TimerForFWUpgrade"方法将对其进行接口."tmr"模块将成为C程序固件更新包的一部分.
计时器将如下工作.在发送消息之前,我将调用TMR_Set方法.然后在我的空闲程序循环中使用TMR_IsElapsed我们检查定时器下溢.如果TMR_IsElapsed我会做错误处理.如您所见,将连续调用TMR_Set方法并一次又一次地重新启动QTimer.
如果我启动程序,就会出现上述错误.你能告诉我我的概念是否有效吗?为什么会出现这种错误?我是否必须在主线程中使用其他线程(QThread)?
谢谢
马特
运行和空闲循环:
void run
{
// start communicate with callbacks where TMR_Set is set continously
...
while(TMR_IsElapsed(TMR_NBR_CFU) != 1);
// if TMR_IsElapsed check for errorhandling
....
}
Run Code Online (Sandbox Code Playgroud)
模块tmr(C程序的接口):
extern "C"
{
void TMR_Set(UINT8 tmrnbr, UINT32 time)
{
TimerForFWUpgrade::set(tmrnbr, time);
}
INT8 TMR_IsElapsed(UINT8 tmrnbr)
{
return TimerForFWUpgrade::isElapsed(tmrnbr);
}
}
Run Code Online (Sandbox Code Playgroud)
模块TimerForFWUpgrade:
SingleTimer* TimerForFWUpgrade::singleTimer[NR_OF_TIMERS];
TimerForFWUpgrade::TimerForFWUpgrade(QObject* parent)
{
for(unsigned char i = 0; i < NR_OF_TIMERS; i++) …Run Code Online (Sandbox Code Playgroud)