C# 要使用哪种线程类型,正确的暂停/中止?
我正在创建一个简单的程序来控制两个电机,出于安全原因,还控制一个光幕。在程序中,用户将点击“运行”,如果没有任何东西进入光幕,电机将移动到不同的位置(在新线程上)。如果有东西进入光幕,则会引发一个事件,该事件必须立即停止所有运动(即停止另一条线) 在这种情况下,我应该使用什么螺纹类型?我对C# 要使用哪种线程类型,正确的暂停/中止?,c#,multithreading,C#,Multithreading,我正在创建一个简单的程序来控制两个电机,出于安全原因,还控制一个光幕。在程序中,用户将点击“运行”,如果没有任何东西进入光幕,电机将移动到不同的位置(在新线程上)。如果有东西进入光幕,则会引发一个事件,该事件必须立即停止所有运动(即停止另一条线) 在这种情况下,我应该使用什么螺纹类型?我对System.Threading.Thread略知一二,并曾将ThreadPool用于小型数值计算任务 此外,如果光幕损坏,安全停止硬件(即螺纹)的适当方法是什么?我听说,Abort()方法是不可取的 谢谢 编
System.Threading.Thread
略知一二,并曾将ThreadPool
用于小型数值计算任务
此外,如果光幕损坏,安全停止硬件(即螺纹)的适当方法是什么?我听说,Abort()
方法是不可取的
谢谢
编辑
我使用的是.NET 2.0。不仅
Thread.Abort()
对您的代码来说不是最安全的,而且看起来也不像是保证引擎关闭的方法。除非线程代码处于某种循环中,一直按下死机开关。换句话说,
安全停止硬件(即线程)
它们似乎不是一回事
你的马达线程应该配合(连续轮询取消标志)。这适用于所有解决方案(线程、TPL) 不仅是
Thread.Abort()
对您的代码来说不是最安全的,而且看起来也不像是保证引擎关闭的方法。除非线程代码处于某种循环中,一直按下死机开关。换句话说,
安全停止硬件(即线程)
它们似乎不是一回事
你的马达线程应该配合(连续轮询取消标志)。这适用于所有解决方案(线程、TPL) 这是最好的答案。由于多种原因,取消必须是合作的。这是最好的答案。由于多种原因,取消必须是合作的。我会在硬件中完成这项工作——从光幕控制器运行一条专用电缆,该光幕控制器在电机控制外壳中保持关闭的电源继电器。还应该有一个软件信号,以便能够安全地重新启动操作,并且不会因为电机控制中断而损坏正在进行的工作或电机/变速箱/工具等,电机是线性执行器,因此,如果它们以最高速度移动负载,并且电源被切断,它们将继续滑动,直到撞到末端。我希望接收信号,使其快速、受控接近停止,然后切断所有电源。我打赌,如果继电器短路或将其连接到低阻抗虚拟负载,执行器不会滑动太远:)不过,我同意你的观点-软件控制停止可能总体上更安全。软件解决方案,尤其是涉及个人电脑的,迟早会在关键时刻失败。硬件解决方案要安全得多。理想情况下,电机会对此提供一些支持。@HenkHolterman是的,硬件将用于关闭电源,但在这样做之前会有一个很小的延迟。在这个延迟期间,我想发送一个软件命令到1。停止/中止移动马达的线程(所以它不发出一个新的移动命令)和2。如果两个马达处于移动中间(即“近站”),则立即发送信号给两个马达停止。.我会在硬件中完成这项工作-从光幕控制器运行一条专用电缆,该控制器在电机控制外壳中保持关闭的电源继电器。还应该有一个软件信号,以便能够安全地重新启动操作,并且不会因为电机控制中断而损坏正在进行的工作或电机/变速箱/工具等,电机是线性执行器,因此,如果它们以最高速度移动负载,并且电源被切断,它们将继续滑动,直到撞到末端。我希望接收信号,使其快速、受控接近停止,然后切断所有电源。我打赌,如果继电器短路或将其连接到低阻抗虚拟负载,执行器不会滑动太远:)不过,我同意你的观点-软件控制停止可能总体上更安全。软件解决方案,尤其是涉及个人电脑的,迟早会在关键时刻失败。硬件解决方案要安全得多。理想情况下,电机会对此提供一些支持。@HenkHolterman是的,硬件将用于关闭电源,但在这样做之前会有一个很小的延迟。在这个延迟期间,我想发送一个软件命令到1。停止/中止移动马达的线程(所以它不发出一个新的移动命令)和2。如果两个马达处于移动的中间位置(即“接近停止”),立即发送一个信号给两个马达停止。