我有一个函数,它通过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函数的工作方式,但首先我需要放弃自己犯错误的可能性(我认为这更有可能)。
有人能告诉我错误在哪里吗,或者另一种更安全的方法吗?
提前谢谢。
来自汉斯的评论。为了控制非托管代码的执行,线程无法提供正确的处理来完成函数,因此要实现真正的超时限制,需要在其他被称为进程的项目中启动该函数,才能调用Kill()函数,从而真正停止进程。