草庐IT

c++ - 为什么以及什么时候我不应该杀死一个线程?

我正在编写一个多线程套接字服务器,我需要确定。关于线程的文章说我应该等待线程返回,而不是杀死它。但在某些情况下,我想踢/禁止的用户线程将无法正常返回(例如,我开始发送一大块数据,此时send()阻塞了线程)所以我会只需要杀死它。为什么终止线程函数很危险,什么时候它们会导致整个应用程序崩溃? 最佳答案 杀死一个线程意味着停止所有的执行。特别是,它不会执行任何析构函数。这意味着不会关闭套接字和文件,不会释放动态分配的内存,不会释放互斥量和信号量等。杀死线程几乎肯定会导致资源泄漏和死锁。因此,您的问题有点颠倒了。真正的问题应该是:When

c++ - 如何杀死或终止 boost 线程

我想终止或杀死boost线程。代码在这里:DWORDWINAPIStartFaceDetector(LPVOIDtemp){intj=0;char**argv1;QApplicationa(j,argv1);//addsomethreadheregui::VisualControlw;t=&w;boost::threadu(&faceThread);w.show();a.exec();//IWanttocloseuthreadhere.return0;}我想在函数返回之前关闭那个boost线程。提前致谢。 最佳答案 在Windows

c++ - 如何杀死 MFC 线程?

我使用AfxBeginThread生成一个线程,它只是一个无限循环:UINTCMyClass::ThreadProc(LPVOIDparam){while(TRUE){//dostuff}return1;}如何在我的类析构函数中终止这个线程?我觉得有点像UINTCMyClass::ThreadProc(LPVOIDparam){while(m_bKillThread){//dostuff}return1;}然后在析构函数中将m_bKillThread设置为FALSE。但是我仍然需要在析构函数中等待,直到线程死掉。 最佳答案 主动杀死

c++ - 如何杀死 Chrome 嵌入式框架子进程?

在PC游戏中,我有用于新闻、虚拟货币商店和社交网络的游戏内浏览器。它是用ChromiumEmbeddedFramework的全新更新构建的。问题是当我打开一个浏览器窗口(网站在那里工作正常)然后关闭时,对于某些网站,CEF子进程没有完成。我也可能会继续听到音频,例如,如果是Youtube视频。我使用离屏渲染,不创建其他原生窗口,只创建子进程。为了关闭浏览器窗口,我删除了对CefBrowser的所有引用并调用:m_browser->GetHost()->CloseBrowser(true);我还尝试了其他方法来关闭/销毁/完成渲染子进程,例如在关闭前加载“about:blank”,但这无

c++ - 当我在 C++ 中终止 pThread 时,是否会调用堆栈上对象的析构函数?

我正在编写多线程C++程序。我打算杀死线程。但是,我也在使用引用计数GC。我想知道当线程被终止时,堆栈分配的对象是否会被破坏。 最佳答案 当您“杀死”一个线程时,堆栈不会展开。杀死线程不是一种稳健的操作方式-它们打开的资源(例如文件)在进程关闭之前一直保持打开状态。此外,如果他们在您关闭它们时保持打开任何锁,则该锁可能会保持锁定状态。请记住,您可能会调用很多您无法控制的平台代码,并且您并不总是能看到这些东西。关闭线程的优雅而稳健的方法是中断它-通常它会轮询以查看它是否被告知要定期关闭,或者它是否正在运行消息循环并且您向它发送退出消息

java - 如何在注销后启动应用程序而不会被杀死?

我有一个Java应用程序,它应该在后台的服务器机器上运行(该应用程序可以通过没有GUI的命令启动)。问题是:当我从服务器注销时,应用程序被终止。我正在寻找类似Linux下的nohup的东西。我找到了一些解决方案,但我不确定,什么是最适合我的情况(WindowsServer2003,从BAT-Skript运行Java应用程序,启动机器后重新启动)?这些解决方案的优缺点是什么?psexec:该过程真的需要在SYSTEM帐户下运行吗?Combinationofinstsrvandsrvany:但是srvanyshouldshouldneverbeusedinaproductionenviro

java - Java中根据PID杀死一个进程

到目前为止我有这个:publicstaticvoidmain(String[]args){try{Stringline;Processp=Runtime.getRuntime().exec(System.getenv("windir")+"\\system32\\"+"tasklist.exe");BufferedReaderinput=newBufferedReader(newInputStreamReader(p.getInputStream()));while((line=input.readLine())!=null){System.out.println(line);//我希

PHP,杀死Windows进程?

有没有办法在不使用exec的情况下使用PHP终止Windows进程,例如calc.exe?exec调用外部程序,除非必要,否则我尽量避免使用该命令。 最佳答案 有。使用W32apiPHP扩展,它提供对Win32API的访问-然后在获取进程句柄后使用TerminateProcess()API。 关于PHP,杀死Windows进程?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/10

c# - 无法杀死的进程

我正在编写一个包含Windows服务和GUI程序的程序,因为Windows服务无法直接与Windows通信。这是一个与服务器守护程序交互的程序,它阻止学生在多个工作站上使用一个帐户登录。(防止密码共享)GUI进程使用Windows自动启动启动,并在用户权限下运行。因此,用户可以轻松地终止GUI进程。这不好,因为GUI进程导致注销(和用户消息)。如何阻止用户终止进程? 最佳答案 由于您无法选择使用操作系统安全来防止这种情况发生,因此技术上的答案是无法做到。这只剩下解决方法或替代方法。一种不受官方支持、依赖于未记录的功能并且您没有从我这

java - 以编程方式在Windows中杀死一个java进程

我有许多在Windows服务器上运行的可执行jar文件。有时,我需要重新部署一些应用程序。为此,我需要先停止现有流程,然后启动新流程。在linux环境中,我使用pkill根据jar文件名终止进程。但在Windows中,所有的java进程都将被命名为“java.exe”。我需要编写一个批处理文件来执行此启动和停止操作。如何根据名称杀死jar文件。假设我的jar文件被命名为common-api.jar。运行命令jps-ml|find"common"将给出结果为6968common-api.jar我可以通过taskkill/f/PID6968终止进程但是我如何从第一个命令中提取进程ID并将其