您的位置:控制工程论坛网论坛 » 人机界面 » 如何在WinCC中调用时间中断Sleep函数

masscer

masscer   |   当前状态:在线

总积分:822  2024年可用积分:0

注册时间: 2008-01-22

最后登录时间: 2016-07-21

空间 发短消息加为好友

如何在WinCC中调用时间中断Sleep函数

masscer  发表于 2008/4/2 9:15:11      1541 查看 0 回复  [上一主题]  [下一主题]

手机阅读

#pragma code("Kernel32.dll")
void Sleep(int Milliseconds);
#pragma code()


Sleep(1000); //time in milliseconds


警告:
“Sleep”函数对动作处理性能有很大的负面影响。因此,如果想用此函数的话,请注意以下几点:


使用Sleep()时,C 脚本的处理在特定的一段时间内被中断。在此期间内,任何对于被中断功能的请求将不被处理。
而且,使用相同触发器的所有动作将不再被处理。使用相同的触发器意味着用同一个循环触发器所有动作或变量触发器的所有动作将不再被处理。如果同步地调用动作,这种调用通过一个变量触发器或事件被周期性地或非周期性地启动,而且所有这些功能使用了Sleep()函数,那么所有的动作会被终止。最坏情况下是;由于启动这四个动作将终止对所有动作的处理。
如果说,在一个带10-秒延迟触发器的动作中使用了Sleep()函数。那么所有被循环调用的动作将被中断。结果是,如:用1-秒触发器的动作操作中断, 除此以外,所有后继的动作也不被执行。这就是说,不仅当前的动作不被处理,其它还没有启动的动作也不会被处理。
作业不被处理是因为中断仍储存在队列中。一旦中断结束,所有在队列中的动作将开始被处理。但是,中断结束后,在队列中的动作不会在他们原来指定的循环中被处理。因此,如同前面所述的那样,那么队列中剩下的动作将被一个接一个的处理而不再由触发器启动。并且这些动作只是尽可能快的被处理掉。 (理论上同步)。

1楼 0 0 回复