vb.net 公共变量跨线程加同步锁

Pirate scholar 2017-11-02 11:08:26
这段程序是在一个线程中执行的代码

While Ifmotor = True
Select Case do_work
Case 0 '打开串口
Dim portnumber As String = "COM2"
IsMotorOpen(portnumber)
Dim RWL As New ReaderWriterLock
RWL.AcquireWriterLock(Timeout.Infinite) 'mydate文件写入锁
Ifmotor = False
RWL.ReleaseLock()
Case 1 '关闭串口
do_deInit()
Ifmotor = False
Case 2 '打开伺服
do_StartServo()
Ifmotor = False
Case 3 '关闭伺服
do_ShutDownServo()
Ifmotor = False
Case 4 '方位向置位
do_Motor_SetPositionH(MyposH)
Ifmotor = False
Case 5 '俯仰向置位
do_Motor_SetPositionV(MyposV)
Ifmotor = False
Case 6 '同时置位
do_Motor_SetPosition(MyposH, MyposV)
Ifmotor = False
Case 7


Case 8


End Select
End While

这个是在另一个线程中改变公共变量的代码
 Ifmotor = True : do_work = 2  '打开伺服

但是实际执行的过程中由于跨城的原因第一段代码是不进入执行的,如何处理?
...全文
569 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xdashewan 2017-11-06
  • 打赏
  • 举报
回复
引用 3 楼 giuhikji 的回复:
能具体讲讲“”ManualResetEvent释放信号量“”在这段代码中的使用方法吗“?
ManualResetEvent用法就是在你需要判断Ifmotor的时候等待其他线程把Ifmotor置为true或者false
xdashewan 2017-11-03
  • 打赏
  • 举报
回复
好多方法都可以,1.执行完 Ifmotor = True : do_work = 2,再开启另一线程 2.Ifmotor默认为True,do_work设置成-1 3.ManualResetEvent释放信号量
Pirate scholar 2017-11-03
  • 打赏
  • 举报
回复
引用 2 楼 xdashewan 的回复:
好多方法都可以,1.执行完 Ifmotor = True : do_work = 2,再开启另一线程 2.Ifmotor默认为True,do_work设置成-1 3.ManualResetEvent释放信号量
能具体讲讲“”ManualResetEvent释放信号量“”在这段代码中的使用方法吗“?
Pirate scholar 2017-11-02
  • 打赏
  • 举报
回复
或者有什么好点的处理方式 ?

16,557

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧