Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 要使用哪种线程类型,正确的暂停/中止?_C#_Multithreading - Fatal编程技术网

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。如果两个马达处于移动的中间位置(即“接近停止”),立即发送一个信号给两个马达停止。