我有一个函数,它通过dll中包含的函数在数据库中完成一些任务。该函数需要使用不同的参数执行多次,但有时需要花费太多时间并且需要终止进程并继续执行队列。 de dll中的函数没有任何超时选项,所以我试图控制它创建一个线程。我不习惯使用线程,但经过一些研究,我做了类似这样的代码:
Dim Thread As New Threading.Thread(AddressOf Function)
Thread.Start()
Thread.Join(maxTime)
If(Thread.IsAlive) Then
WriteLogFile("Error [....]")
Thread.Abort()
End If
顺便说一句,这不是更聪明或最优雅的方式,但是当我测试它时它似乎有用,但现在我看到“超时”不起作用。好吧,如果我用几秒钟设置超时,它似乎运行良好。但如果我把它设置为10分钟,这是我需要的,需要的时间比10分钟多得多。我可以预期,Thread.join()可能并不完全准确,但差别不是几秒钟。
我尝试了许多类似的方法,所以我不知道我是否有正确的问题焦点。也许代码的故障来自.dll函数的工作方式,但首先我需要丢弃自己错误的可能性(我认为更可能)。
¿任何人都可以告诉我错误在哪里,或者其他方式更安全吗?
提前致谢。
答案 0 :(得分:0)
Hans的评论回答。为了控制非托管代码的执行,线程无法提供正确的处理来完成函数,因此要实现真正的超时限制器,需要在其他项目中启动该函数,称为进程,以便能够调用Kill()函数,它真正停止了这个过程。