线程函数是个死循环,如何强制退出?

2025-02-27 14:59:03
推荐回答(2个)
回答1:

首先,一旦线程被启动,就跟你原来那个线程就独立了,现在就有两个线程同时在运行(至少你可以理解成同时在运行,互不相干),原来的线程是默认的主线程,就是你的main函数一启动的运行线程,b.start后就新建了线程,和原来的线程是相互独立同时运行的。

所以,test2,和test1两行都会被顺利执行, 而B线程仍然不会停止。

这里需要引起你的注意的地方有几个:
1。 你需要有一个参数来控件B线程的运行和停止,否则B线程永远都不会停,占用了系统资源。 所以你要写成 while(flag)而不要写在while(true), 变量flag在可以被线程A或者被main函数更改,线程B自己也可以在循环体内按照逻辑需要进行修改。只需要一行代码:
flag=false; 这样死循环就退出了。

2。如果你还有其它线程需要跑,在while代码体内,需要有睡眠时间,一般可以这样写Thread.sleep(毫秒数). 这样的目的是体现公平性, 否则其它线程很少得到被执行的机会,如果你这个程序是一个带界面按钮的程序,那界面是的按钮就很难被按下,因为线程B占用了绝大多数的CPU时间

回答2:

BOOL TerminateThread(
HANDLE hThread, // handle to thread 指定一个线程句柄,就是你创建的时候得到的那个
DWORD dwExitCode // exit code 指定了一个线程的退出码,是一个输出参数
);