最近在做短信的,使用的是c#2005提供的serialport类,收到数据响应事件datareceive。
思想是使用一个短信收发线程控制短信的发送,当有新的短信到来时,也就是“+CMTI:”到来时,我使用的异步调用,专门去接受短信,把短信解析出来,放到接受短信队列中。但在异步调用之前,我把收发线程给suspend了。异步完之后我再resume。但问题出现来,当我在不停的把要发的短信扔到发送队列时,收发线程在发短信的同时,我回了条短信给gsm终端,此时异步调用解析短信,但我刚发送的那条短信虽然有可能发送成功,但我却没有真的进行处理,当异步执行完之后,我想回去处理,但不知为什么线程不在原来那个位置,而是重头开始了?不知是不是我处理的方法不对,还是其他什么,c# 2005提示一个警告,说使用monitor mutex
之类的来解决资源的同步,不知大家有没有什么解决办法,帮我一下。不胜感谢!对了,我把datareceive事件接受到的数据都保存到一个RcvBuf中了,所以要重新再找回来原来的发送短信的“OK”或者“ERROR“。

解决方案 »

  1.   

    private bool void blnSuspend = false;public void yourThreadFun()
    {
        while( true )
        {
            if( !blnSuspend )
            {
                 //Send sms here
            }
            else
                Thread.Sleep( 50 );
         }
    }//Suspend thread to set "blnSuspend" with true
    //Resume thread to set "blnSuspend" with false
      

  2.   

    to 但是我的短信已经发送出去了,只是返回的结果我没有进行处理,我希望能够把原来的返回结果得到,这样就不用重新再发一变短信了呢是你线程规划问题,也许根本用不到suspend
      

  3.   

    不用suspend?我以前也没有用suspend的呢,但再根据“+CMTI:"SM",2”中的索引2,再发送命令at+cmgr=2时,就混乱了,接收到的数据改怎么来区分?另一方面,线程那里还在发短信呢?不知你怎想?
      

  4.   

    今天改了一下,没有把线程挂起,直接在读取的时候进行了处理, 呵呵,看来Knight94(愚翁) 比较有经验,谢谢了:)
      

  5.   

    Mark.yujuanwang726能贴点你的代码出来吗?最近我也一直在困惑这个问题。一直放心不下我的线程处理方式。想了解了解你怎么处理的。好?