现在有一个流程理不出头绪来,程序中有一个定时器,每隔5秒触发一次。有一个listbox,里面的数据也是不确定的,可能增加也可能减少。
现在要求:触发定时器时,发送listbox的项数据,如果就一项,则发送第一项的数据。如果listbox有3项,则下一次时传送第2项的数据,如此类推循环执行。

解决方案 »

  1.   

    大致看了一下,感觉你的功能描述本身有些小问题,如果按你所说,那你的需求需要考虑重复发送的问题吗?或者说只要按照list顺序发送即可,别的都不考虑。哪么就就简单的定一个类的全局int计数器,每5秒(OnTimer)触发时++。同时获取list的数据项,如果存在这个++的数据项,就发送,否则不发送。可看你的需要是要考虑list动态变化的,哪么复杂的话是不是要维护一个链表,用来保存你已经发送的数据,每次获取list的时候需要和你的链表进行对比,以保证不重复,或者不遗漏发送。
      

  2.   

    我是这样理解的,
    这是个定时监控listbox中数据的程序,而listbox中的数据是动态变化的,如果监控到listbox中只有一项数据,那么就直接发送listbox中的第一项数据,如果监控到listbox中有三项数据,则下一次时间间隔(也就是下一次定时器触发时)发送listbox中的第二项数据。如此一直监控下去。
      

  3.   

    就是在Ontimer里每次只发送一个ListBox里的数据,发送完后记录刚发完的这个Item的索引nIndex,下次Ontimer的时候先判断,如果nIndex + 1比ListBox中Item的个数少,则发送第nIndex + 1个Item,然后再将nIndex++;这样一直执行下去就行。int nItemCount = m_ListBox.GetItemCount();
    if(m_nIndex < nItemCount - 1)
       SendOneItem(++m_nIndex);
      

  4.   

    用一个成员变量来做计数器,初始化为0,在定时函数中,先取listbox的总项数,然后用计数器对总项数求余,以余数为索引值取数据发送,最后把计数器加一。
      

  5.   

    用一个成员变量来做计数器,初始化为0,在定时函数中,先取listbox的总项数,然后用计数器对总项数求余,以余数为索引值取数据发送,最后把计数器加一。
      

  6.   

    如果listbox的值动态变化
    并且不允许发送重复数据
    还需要一个结构记录已经发送的项
    当定时器触发时,取出一项,与历史记录比较,如果没有发送过,就发送
      

  7.   

    LZ可以这样设计你的流程
    为保证数据发送的完整性,也为了软件的可靠性,进行如下步骤
    1。在定时器回调函数中,记录listctrl中的记录个数,并根据个数申请空间,将控件所有条目获得并保存到申请空间内(快照)
    2。发送第一个数据
    3。在定时器回调函数中,逐条顺序发送快照中数据
    4。当发送个数等于记录个数,返回1,重复快照动作