用语音卡开发一个座席呼叫系统,共有4个外线模块4个内线模块;整个算法过程是这样的(只举一个简单的过程)
1、当其中一个外线来电时,在振铃事件中这里要判断是那条外线(4条分别编上了1、2、3、4编号);这里有一个参数 
    OLineNo;
2、开始轮询内线状态从1-4,依次判断那条是空闲的,找到空闲的,把OLineNo这条内线和找到的内线ILineNO握手;这里有一
   个表示内线的参数ILineNO;
3、之后在摘机事件中接通外线和内线之间的连接,进行通话;
4、在判断内线挂机时,断掉连接、握手、并通知外线挂机;
这里就有问题了,就是两个参数的问题;这两个参数OLineNo、ILineNo都设置为了全局变量;当一条外线和内线接通之后在通话中(例如OLineNo=1、ILineNo=3),这时有另一条外线如是3通道进来这时OLineNo=3假如选择的内线是2那ILineNo=2了,之后问题就来了第4过程步骤就乱了没有办法完成了,因为当内线3挂机时,对应的外线参数值OLineNo=3已不是以前的1了,这样下来就把外线3线挂机了(或其它操作)而要挂机的1通道外线却还是通的;但实际外线3还在通话中就给强行挂机了;这里的对应关系就乱套了,不知这里是怎样设置相关的参数才能保证这个对应关系始终能判断的到,而不乱掉;最好有现成此方面的代码,或例码

解决方案 »

  1.   

    定义一个数组
    start[4][4]
    其中,第一个下标表示内线序号,第二个下标表示外线序号,值表示状态0 无连接 1 有连接
    得到外线序号j 
    开始轮询内线状态从1-4,的值,得到序号i,即start[i][j]=1;
    内线挂机,即检查外线 for 循环 得到 start[i][j] = 1 通知j外线挂机. start[i][j] = 0 
      

  2.   

    振铃事件,得到外线号j
    检查内线:
    for i=1;i <4;i++
    {
        b =0;
        for a=1;a <4;a++
        {
            if start[i][a] = 1 
               b =1; 
        }
        if b =0 break;
    }
    得到i;
    将内线i,和外线j 连接 通话 
    start[i][j] = 1;内线挂机事件 得到序号i
    判断连接外线j
    for j=0; j<4;j++
    {
        if start[i][j] = 1
           break;
    }  
    得到外线j
    拆掉连接i,j start[i][j] = 0;