关于主线程控制多子线程的一些问题

时间:2021-07-29 17:32:17
主线程是一个判断环境的函数,类似这样的:

switch(type)
{
case 1:
    执行线程1;
case 2:
    执行线程2
case 3:
    执行线程3
...

}


主线程5秒执行一次,但是线程1,2,3执行时间都超过5秒。我想要的效果是,如果type值为1的时候,主线程执行,线程1也正在执行,那么主线程就不干预线程1的运行;如果执行主线程的时候,type为2,线程1正在执行,那么主线程将中断线程1的运行并且执行线程2。请问这样应该如何做到?谢谢。

7 个解决方案

#1


CreateThread,TerminateThread

#2


创建时存好线程句柄,,如果要TerminateThread的话
建议少用为好,
可以考虑消息机制通知子线程终止---事件机制也可以啊
再简单点,共享全局变量 BOOL ,子线程检测到FALSE ,自动退出,,,

#3


TerminateThread中断会造成内存泄漏的,程序需要6~12小时运行,不知道这样造成的内存泄漏是否在可接受范围内。我也查询过CSDN上相关的问题,但是对于TerminateThread的内存泄漏问题似乎都没有一个比较公认的答案。

我是在MFC下编程,不知道在子线程中消息机制如何使用?是发送WM_CLOSE消息吗?子线程又如何及时响应?我是新手,如果有时间的话麻烦给个范例,谢谢了。

全局变量考虑过,但是因为子线程中存在大量SLEEP语句,难道要每一次SLEEP的时候都检测一下是否退出?我觉得应该会有其他办法可以解决的吧,如果不行也只能这样了。

#4


同意shawnwan的说法

#5


任何内存失去的方法都是不可以接受的。
另即使有消息给你,你也是要每次进行判断啊,要进行通讯就只能有所付出啦

#6


当运行线程2的时候将线程1挂起pThread1 ->SuspendThread;然后在运行线程2
如果不需要线程1再运行直接就pThread1 ->exithread(exitThread1ID);

#7


那也只能这样啦 谢谢大家 就结帖

#1


CreateThread,TerminateThread

#2


创建时存好线程句柄,,如果要TerminateThread的话
建议少用为好,
可以考虑消息机制通知子线程终止---事件机制也可以啊
再简单点,共享全局变量 BOOL ,子线程检测到FALSE ,自动退出,,,

#3


TerminateThread中断会造成内存泄漏的,程序需要6~12小时运行,不知道这样造成的内存泄漏是否在可接受范围内。我也查询过CSDN上相关的问题,但是对于TerminateThread的内存泄漏问题似乎都没有一个比较公认的答案。

我是在MFC下编程,不知道在子线程中消息机制如何使用?是发送WM_CLOSE消息吗?子线程又如何及时响应?我是新手,如果有时间的话麻烦给个范例,谢谢了。

全局变量考虑过,但是因为子线程中存在大量SLEEP语句,难道要每一次SLEEP的时候都检测一下是否退出?我觉得应该会有其他办法可以解决的吧,如果不行也只能这样了。

#4


同意shawnwan的说法

#5


任何内存失去的方法都是不可以接受的。
另即使有消息给你,你也是要每次进行判断啊,要进行通讯就只能有所付出啦

#6


当运行线程2的时候将线程1挂起pThread1 ->SuspendThread;然后在运行线程2
如果不需要线程1再运行直接就pThread1 ->exithread(exitThread1ID);

#7


那也只能这样啦 谢谢大家 就结帖