同步调用

<< 点击显示目录 >>

主页  PVI通信 > PVI帮助信息 > PVI Services > 事件处理 >

同步调用

正如多次提到的,PVI服务不支持同步调用。然而,仍然有需要同步调用的情况。下面的例子通过实现 WriteValueSynchron 方法模拟了应用程序中的同步行为  。

Variable var1 = new Variable(cpu,"var_01");
Variable var2 = new Variable(cpu,"var_02");
Variable var3 = new Variable(cpu,"var_03");
var1.Connect();
var2.Connect();
var3.Connect();
// ...所有变量成功连接
WriteValueSynchron(var1,new Value(23),1000);
WriteValueSynchron(var2,new Value(445),1000);
WriteValueSynchron(var3,new Value(0),1000);
/// <summary>
/// Synchronous writing of value
/// </summary>
/// <param name="variable">Variable object</param>
/// <param name="value">Value of variable</param>
/// <param name="timeout">Timeout in milliseconds</param>
private int WriteValueSynchron(Variable variable, Value valueint timeout)
{
  // 数据类型检查
  if (variable.Value.DataType != value.DataType)
    return -1;
  // 开始异步调用被设置的值
  variable.Value = value;
  // 等待,直到数值成功设置
  while(variable.Value != value)
  {
    // 执行事件
    Application.DoEvents();
    System.Threading.Thread.Sleep(10);
    timeout -= 10;
    // 如果超过了超时时间
    if (timeout <= 0 )
       return -1;
  }
  return 0;
}