我正在用C#编写一个程序,该程序与一个小型显示单元进行接口,该小型显示单元执行与此问题无关的大量内容。杀死等待答案的线程
我有如下详述的问题: 当用户选择一个按钮,将试图节省一些设置到该设备,它使用一个确认协议,以确保设置经历 (含义 - 它发送设置,然后等待来自设备的确认数据包。)
我所做的是在主应用程序中生成一个线程,该线程将成为我将要生成的线程的“父”线程,它将尝试保存到设备。目前,它的工作方式如下:
生成线程1 - >尝试保存。
如果超时,中断线程1(释放设备的数据锁)通过了Thread.interrupt()< -----这就是问题所在。这不起作用。它加粗锁定,直到设备关闭或拔出,然后出错。 (然后它会创建一个新的线程,现在发生,但它永远不会工作,因为第一个线程仍然锁定数据)。
如果没有超时,线程1的回调让父线程知道不会再生成任何线程。
最后,如果没有线程成功,则整体尝试失败。
我还试图只产生和关闭单个线程,这也显示出,其中等待来自设备的确认时,它永久地挂起,直到设备相同的行为这样被断电或拔出。
无法封装等待设备发送ack的布尔值,该布尔值可能被设置为停止线程,因为它从不离开等待的调用。这是嵌入式软件,所以我无法修改等待功能。我只能修改嵌入式软件的C#接口。
您使用的是什么版本的.NET Framework? –
我正在使用.NET 4.0 –
我不完全清楚最后一点。调用一个函数来等待ACK,但是该函数存在并且在主机上运行,而不是在嵌入式系统上运行,那为什么它不能被修改?它是一个封闭源驱动程序吗?你也必须想知道为什么ACK从未收到过? – Clifford