这个问题很久之前在WinCC 深入浅出 这本书中介绍过C脚本与VBS脚本执行效率的对比,今天突然用C脚本写一个现实登陆状态的脚本时出现了一个奇怪的现象,让我不禁又想起了这个问题
以下是在全局脚本中由@CurrentUserName变量触发的C脚本,LogiName是定义的一个内部字符串变量用于现实登陆状态,比如@CurrentUserName="张三"时会显示“张三已登录"
int gscAction( void )
{
#pragma option(mbcs)
#define Apc_CurrentUserName "@CurrentUserName"
char LoginNameText[50]="Nothing";
if (strcmp(GetTagCharWait(Apc_CurrentUserName),"")==0)
{
strcpy(LoginNameText, "登陆/注销");
}else
{
strcpy(LoginNameText,GetTagCharWait(Apc_CurrentUserName));
strcat(LoginNameText,"已登录");
}
SetTagChar("LogiName",LoginNameText); //Return-Type: BOOL
return 0;
}
同样的VBS脚本
Function action
Dim CurrentUserName,LoginName
Dim LoginNameText
Set CurrentUserName=HMIRuntime.Tags ("@CurrentUserName")
CurrentUserName.read
Set LoginName=HMIRuntime.Tags ("LogiName")
LoginName.read
If CurrentUserName.value="" Then
LoginNameText="登陆/注销"
Else
LoginNameText=CurrentUserName.value&"已登录"
End If
LoginName.Write LoginNameText
End Function
分别测试两段代码发现,C脚本在@CurrentUserName变化时需要至少3秒才会在将LogiName赋值为"张三已登录",而VBS代码则基本是同时赋值的,请问这是为何呢?真是执行效率的关系?