首页 > 编程知识 正文

易语言结束子程序,java终止线程

时间:2023-05-04 08:06:38 阅读:62513 作者:1131

TerminateThread是个坏主意。 特别是线程使用互斥体等同步对象时。 因为它可能会引起未公开的内存和句柄,导致死锁,所以你是对的,你需要做别的事情。

通常,线程的结束由定义线程的函数返回。 主线程通过事件对象或简单的布尔值表示工作线程结束,并经常进行检查。 如果工作线程正在等待WaitForSingleObject,则必须将其更改为WaitForMultipleObjects。 其中一个是活动。 主线程调用SetEvent

除非我们让你看看你在做什么,否则我们不能提供真正有用的代码。根据工作线程在做什么以及主线程如何向它传递信息,它可能看起来很不一样

此外,“当前旧”] MSVC要求使用_beginthreadex而不是CreateThread,以避免CRT中的内存泄漏。 请参阅MSKB #104641。

更新:

工作线程的一个使用是计时器,定期执行一些操作。 最微不足道的事情:

for (; () )。

交换机(waitforsingleobject (kill _ event,timeout ) ) }

case wait _ time out :/* dotimeraction */break;

default :返回0;/*退出the thread * /

}

}

另一个用途是根据需要做某事。 基本上相同,但超时设置为INFINITE,对WAIT_OBJECT_0而不是WAIT_TIMEOUT执行特定操作。 在这种情况下,需要两个事件:一个启动线程并执行一些操作,另一个启动并退出。

handle handles [2]={ action _ handle,quit_handle };

for (; () )。

交换机(waitformultipleobject (handles,2,FALSE,INFINITE ) ) ) ) ) ) ) )。

case wait _ object _ 00:/* do action */break;

默认:

case wait _ object _ 01:/* quit */break;

}

}

请注意,如果WFSO/WFMO返回错误而不是预期结果之一,则循环将执行合理的操作。 在上面的两个例子中,我们只把一个错误视为错误信号。 这就像是被告知我们要结束。

通过从主线程关闭事件句柄,可以获得与第一个示例相同的结果。 因此,工作线程从WaitForSingleObject获取错误并退出,但不建议使用此方法。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。