关于通讯、数据库、线程同步(配合使用时)的讨论数据库表:SMS
ID 
MOBILE    //手机号
CONTEXT  //内容
STATUS   //状态,1,0
实时监控数据库中是否有消息需要发送,如果查询出未发送的记录数大于0,从数据库中取一条STATUS等于0(未发的短信),给发送线程,发送线程发送成功后把该记录更新为已经发送,如果没有发送成功继续发送。看看大家线程处理的时候怎么处理比较好!
//不使用TIME控件,尽量不使用SLEEP

解决方案 »

  1.   

    我能想到的就是用Time不停的去检测数据库,如果查到了至于发送线程和程序同步则可以采用同步信号量来同步。
      

  2.   

    我先做个小结论:
    1、为什么不使用TIME的原因是TIME的时间控制很不好控制,只对简单的处理有比较好的效果,如果多个TIME的话肯定要出问题的。
    2、没有采用大家说的放入LIST,因为如果发送中途程序关闭那么就会失去LIST中的对象,所以采用了直接读一个,然后发送,发送后更新记录状态,然后再查询。这样保证了数据库的实时同步
    3、发送线程采用连接池?没有必要,本身COM口发送的时候就要停留7秒后,才能发送第二个消息。
    4、我现在想到的需要用的THREAD,SETEVENT,WaitForSingleObject,EnterCriticalSection(CS);
      

  3.   

    针对第2点 如果程序关闭List对象丢失,但你的发送线程也未对数据做状态变更处理,
    所以下次启动程序后监控线程还会获取到未发送的数据,所以数据不会丢失。
    其它的等高手指点学习
      

  4.   

    如果是 MSSQL 可以做個外部的觸發器,做個 DLL ,有數據變化時,通知你的程序