具体的问题是这样的……我们有一批分散安装的远程抄表设备,这些设备使用gprs网络登陆到一台客户的服务器上,在服务器上运行着的管理这些设备的程序一般称作“主站”。我们作为设备提供商想与这些设备通讯的话,除了跑到设备旁边接笔记本,就只能通过“主站”所提供的webservice接口。具体说就是一个函数,参数是要发给设备的命令、超时时间、是否需要回应,返回值就是设备的回应。这里有两个问题,第一 gprs通讯并不十分稳定,主站也不能时刻了解连接是否通畅,所以主站有时候也是等超时才知道设备通讯不上的;第二 这个webservice工作情况也不太稳定,比如有时使用两台不同的电脑通过webservice向同一设备发指令,其中一台会比较快而在此期间另一台电脑会得不到回应。一般情况下,只是发个命令,看个回复,这个模式还能忍,但现在需要对这些设备发送分包文件进行远程升级……我做的程序思路是每太设备发的一个包,都新起一个线程,线程的内容就是webservice函数,如果有返回值,那么根据返回值的情况进行下一步(比如再开一个线程发下一个包),然后该线程结束。但现在经常发生线程执行了函数,然后在那苦等函数返回值,有时候时间还很长……如果不等它回应,等个30秒再开一个线程发同一个包,有时返回是正常的。业务逻辑可以继续,但那上一个线程还是停在那……有没有办法能让线程 (获得函数返回值) or (建立20秒之后) 两条件满足一个就能结束……?
独立外部程序方式运行