请问大家有哪些立刻结束线程的方法?尤其是结束阻塞的线程 谢谢大家了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 还是要用flag,让你的阻塞线程退出循环等,比较合理,如果你线程里面合理,退出很快 关键看你是怎么阻塞的。如果是socket 阻塞,直接在其他线程中关闭socket .阻塞的socket 操作会失败返回。如果是用的等待函数,可以考虑用alertable 等待,其他线程通过APC让等待函数返回。当然,你也可以通过等待一个专门的对象来识别退出 sema,event,这些事件都可以达到结束线程的目的。 阻塞的话就只能TerminateThread了 最好是让线程自己reutrn返回,最安全 Windows终止线程运行的四种方法:终止线程运行 若要终止线程的运行,可以使用下面的方法: • 线程函数返回(最好使用这种方法)。 • 通过调用 ExitThread 函数,线程将自行撤消(最好不要使用这种方法)。 • 同一个进程或另一个进程中的线程调用 TerminateThread 函数(应该避免使用这种方法)。 • 包含线程的进程终止运行(应该避免使用这种方法)。 下面将介绍终止线程运行的方法,并且说明线程终止运行时会出现什么情况。线程函数返回 始终都应该将线程设计成这样的形式,即当想要线程终止运行时,它们就能够返回。这是确保所有线程资源被正确地清除的唯一办法。 如果线程能够返回,就可以确保下列事项的实现: • 在线程函数中创建的所有 C++ 对象均将通过它们的撤消函数正确地撤消。 • 操作系统将正确地释放线程堆栈使用的内存。 • 系统将线程的退出代码(在线程的内核对象中维护)设置为线程函数的返回值。 • 系统将递减线程内核对象的使用计数。使用 ExitThread 函数 可以让线程调用 ExitThread 函数,以便强制线程终止运行: VOID ExitThread(DWORD dwExitCode); 该函数将终止线程的运行,并导致操作系统清除该线程使用的所有操作系统资源。但是,C++ 资源(如 C++ 类对象)将不被撤消。由于这个原因,最好从线程函数返回,而不是通过调用 ExitThread 来返回。 当然,可以使用 ExitThread 的 dwExitThread 参数告诉系统将线程的退出代码设置为什么。ExitThread 函数并不返回任何值,因为线程已经终止运行,不能执行更多的代码。使用 TerminateThread 函数 调用 TerminateThread 函数也能够终止线程的运行: BOOL TerminateThread(HANDLE hThread, DWORD dwExitCode); 与 ExitThread 不同,ExitThread 总是撤消调用的线程,而 TerminateThread 能够撤消任何线程。hThread 参数用于标识被终止运行的线程的句柄。当线程终止运行时,它的退出代码成为你作为 dwExitCode 参数传递的值。同时,线程的内核对象的使用计数也被递减。 注意 TerminateThread 函数是异步运行的函数,也就是说,它告诉系统你想要线程终止运行,但是,当函数返回时,不能保证线程被撤消。如果需要确切地知道该线程已经终止运行,必须调用 WaitForSingleObject 或者类似的函数,传递线程的句柄。 TerminateThread还是要谨慎用啊!不得已而用之 用ShellExecuteEx调用sqlplus的问题 为什么添加变量后,程序不能运行? 新手问题:函数调用类型转换? 结构体----〉short * 回调函数怎么调用对象的函数? 控件字体设置问题 求助:spin控件的问题,达人指点。。。。。 怎样获得某个窗口的句柄? 再问个问题,请各位大哥帮忙 关于VC编译器的问题~~~ 那有《WINDOWS核心编程》ebook? 如何使按钮在界面上移动 求助,关于位图叠加和透明度设置的问题
终止线程运行 若要终止线程的运行,可以使用下面的方法:
• 线程函数返回(最好使用这种方法)。
• 通过调用 ExitThread 函数,线程将自行撤消(最好不要使用这种方法)。
• 同一个进程或另一个进程中的线程调用 TerminateThread 函数(应该避免使用这种方法)。
• 包含线程的进程终止运行(应该避免使用这种方法)。 下面将介绍终止线程运行的方法,并且说明线程终止运行时会出现什么情况。线程函数返回 始终都应该将线程设计成这样的形式,即当想要线程终止运行时,它们就能够返回。这是确保所有线程资源被正确地清除的唯一办法。
如果线程能够返回,就可以确保下列事项的实现:
• 在线程函数中创建的所有 C++ 对象均将通过它们的撤消函数正确地撤消。
• 操作系统将正确地释放线程堆栈使用的内存。
• 系统将线程的退出代码(在线程的内核对象中维护)设置为线程函数的返回值。
• 系统将递减线程内核对象的使用计数。使用 ExitThread 函数 可以让线程调用 ExitThread 函数,以便强制线程终止运行:
VOID ExitThread(DWORD dwExitCode); 该函数将终止线程的运行,并导致操作系统清除该线程使用的所有操作系统资源。但是,C++ 资源(如 C++ 类对象)将不被撤消。由于这个原因,最好从线程函数返回,而不是通过调用 ExitThread 来返回。
当然,可以使用 ExitThread 的 dwExitThread 参数告诉系统将线程的退出代码设置为什么。ExitThread 函数并不返回任何值,因为线程已经终止运行,不能执行更多的代码。使用 TerminateThread 函数 调用 TerminateThread 函数也能够终止线程的运行:
BOOL TerminateThread(HANDLE hThread, DWORD dwExitCode); 与 ExitThread 不同,ExitThread 总是撤消调用的线程,而 TerminateThread 能够撤消任何线程。hThread 参数用于标识被终止运行的线程的句柄。当线程终止运行时,它的退出代码成为你作为 dwExitCode 参数传递的值。同时,线程的内核对象的使用计数也被递减。 注意 TerminateThread 函数是异步运行的函数,也就是说,它告诉系统你想要线程终止运行,但是,当函数返回时,不能保证线程被撤消。如果需要确切地知道该线程已经终止运行,必须调用 WaitForSingleObject 或者类似的函数,传递线程的句柄。