我一直在为使用套接字与另一个应用程序进行通信的iPad应用程序工作,并且在将数据发送到我的服务器应用程序时遇到很多问题。如何实现套接字超时?
我有3个命令,我发送到服务器取决于我需要什么类型的信息,其中一个命令总是发送一个响应,但其他2个不需要,所以我需要在我的应用程序超时知道服务器何时不发送响应。
当我创建套接字时,我注册了一个数据到达时调用的回调函数,这个回调函数应该在后台监听,但我注意到如果我发送数据并暂停应用程序的主线程(暂停它有一段时间或具有睡眠功能)回调从未被调用。
因为我不能在主线程中等待,所以我决定创建一个单独的线程,在这个线程中我所做的就是睡眠线程一段时间(超时),然后检查一个只在回调方法被调用时才设置的标志(换句话说,如果服务器发送响应),并且如果没有设置此标志,那么我知道对服务器超时的请求,并且我可以向前移动。现在
,问题是,我有送50请求到服务器的方法,逻辑是这样:
方法1发送请求,并开始等待的线程(查询超时)
等待线程睡眠n秒
一个 - 如果数据到达,而等待的线程是睡眠,回调方法被调用时,设置一个标志,表明数据已经到达,做一些东西,并调用方法1,循环STA室温超过
b - 如果为数据数据没有到达,到达的数据标志保持假
等待线程醒来,检查到达的数据标志
一个 - 如果该标志为真(数据到达时),退出线程
b - 如果为标志是假的(数据未到达),调用方法1,并退出线程
但在T工作他的方式是向我的应用程序引入许多问题,行为不正确,并且有时会混淆调用,并且我可以在调试时看到延迟线程连续多次调用,但应该只调用一次每个周期(你可以想象一个周期从1到4,见上面),所以我的猜测是我的问题的原因是我实现我的超时的方式,因为如果我尝试使用命令总是发送回复,我没有任何问题。
有没有人可以帮助我更好地实现等待超时?
谢谢。