天 天空4567 Unregistered / Unconfirmed GUEST, unregistred user! 2006-06-28 #1 有两个线程:一个用于监控,一个用于检测。在监控线程里,读串口数据,计算后分析判断数据。当该数据满足检测条件时,触发检测线程的执行,并在检测线程启动后立即终止并撤消监控线程。 想问:该在启动检测线程,还是先终止和撤消监控线程?为什么?
有两个线程:一个用于监控,一个用于检测。在监控线程里,读串口数据,计算后分析判断数据。当该数据满足检测条件时,触发检测线程的执行,并在检测线程启动后立即终止并撤消监控线程。 想问:该在启动检测线程,还是先终止和撤消监控线程?为什么?
D dey-999 Unregistered / Unconfirmed GUEST, unregistred user! 2006-06-28 #2 也不用想得太复杂了: 1,检查线程运行时如果满足条件就给主程序发送消息,并且定义变量,发送之后变量为真,就不用继续发送消息 2,主程序收到消息后关闭检查线程 3,启动检测线程,
天 天空4567 Unregistered / Unconfirmed GUEST, unregistred user! 2006-06-28 #3 TO dey-999,: 谢谢你。你的意思我明白了,但是,我对消息机制不熟悉。 我是在监控线程里调用“检测条件的判断过程”,如果满足,则在该过程里直接启动检测线程,并立即关闭监控线程。这样做不合适?会引起系统资源争用?
TO dey-999,: 谢谢你。你的意思我明白了,但是,我对消息机制不熟悉。 我是在监控线程里调用“检测条件的判断过程”,如果满足,则在该过程里直接启动检测线程,并立即关闭监控线程。这样做不合适?会引起系统资源争用?
M mmzmagic Unregistered / Unconfirmed GUEST, unregistred user! 2006-06-29 #4 我是在监控线程里调用“检测条件的判断过程”,如果满足,则在该过程里直接启动检测线程,并立即关闭监控线程。这样做不合适?会引起系统资源争用? 监控线程的执行过程 if 检测条件的判断过程 then begin 检测线程.唤醒; 监控线程.暂停 end; 检测线程的执行过程 if 获取数据 then begin 检测线程.暂停; 监控线程.唤醒; end; 这样即可:) 实际有更好的处理办法 监控线程发现数据后读取并且写入一个数据队列 检测线程定时循环检查数据队列有数据就处理 2个线程并行工作互不影响也互不干扰
我是在监控线程里调用“检测条件的判断过程”,如果满足,则在该过程里直接启动检测线程,并立即关闭监控线程。这样做不合适?会引起系统资源争用? 监控线程的执行过程 if 检测条件的判断过程 then begin 检测线程.唤醒; 监控线程.暂停 end; 检测线程的执行过程 if 获取数据 then begin 检测线程.暂停; 监控线程.唤醒; end; 这样即可:) 实际有更好的处理办法 监控线程发现数据后读取并且写入一个数据队列 检测线程定时循环检查数据队列有数据就处理 2个线程并行工作互不影响也互不干扰
天 天空4567 Unregistered / Unconfirmed GUEST, unregistred user! 2006-06-29 #5 TO mmzmagic: 谢谢你。你的思路非常好。(`_`) 监控线程的执行过程: if 检测条件的判断过程 then begin 检测线程.Resume; 监控线程..Suspend; end; 那么,检测线程.Resume后监控线程..Suspend;这样不会出现死机或者等待、争用等现象吧?
TO mmzmagic: 谢谢你。你的思路非常好。(`_`) 监控线程的执行过程: if 检测条件的判断过程 then begin 检测线程.Resume; 监控线程..Suspend; end; 那么,检测线程.Resume后监控线程..Suspend;这样不会出现死机或者等待、争用等现象吧?
M mmzmagic Unregistered / Unconfirmed GUEST, unregistred user! 2006-06-29 #6 2个线程同时只有一个在执行当然就不会出现你所担心的现象拉:) 不过要注意状态控制:) 比如程序启动时那个线程是暂停的。结束时要结束的线程不能处于Suspend状态 等等
天 天空4567 Unregistered / Unconfirmed GUEST, unregistred user! 2006-06-29 #7 TO mmzmagic: 谢谢。 1、不能结束一个Suspend状态的线程? 2、我的检测线程启动时,监控现成就完成使命而终止撤消(可以撤消一个Suspend状态的线程吧?) 3、Suspend与Resume不成对? 4、在监控线程里判断到满足检测线程的条件时,如果此时先终止监控线程,再启动检测线程,会怎样?(这个问题 可能很幼稚吧?~_~)
TO mmzmagic: 谢谢。 1、不能结束一个Suspend状态的线程? 2、我的检测线程启动时,监控现成就完成使命而终止撤消(可以撤消一个Suspend状态的线程吧?) 3、Suspend与Resume不成对? 4、在监控线程里判断到满足检测线程的条件时,如果此时先终止监控线程,再启动检测线程,会怎样?(这个问题 可能很幼稚吧?~_~)
C carrie4002 Unregistered / Unconfirmed GUEST, unregistred user! 2006-07-04 #8 很简单。在结束监控前启动检测线程。其启动和结束的条件依mmzmagic的观点。他说得对。