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