草庐IT

terminate

全部标签

c++ - 在这个简单的场景中是否可能出现死锁?

请看下面的代码:std::mutexmutex;std::condition_variablecv;std::atomicterminate;//Workerthreadroutinevoidwork(){while(!terminate){{std::unique_locklg{mutex};cv.wait(lg);//Dosomething}//Dosomething}}//Thisfunctioniscalledfromthemainthreadvoidterminate_worker(){terminate=true;cv.notify_all();worker_thread.

c++ - 当我什至无法进入代码时如何调试 "This application has requested the Runtime to terminate it in an unusual way."?

我有一个C++程序,它在进程启动后立即给出此错误-显然是在任何用户代码执行之前。它仅在启用内联时发生。即使内置了调试符号,我也无法进入代码。当我在VisualStudio中按下F10时,我收到了错误并且程序停止了。我在“调试/异常”中检查了所有异常/检查,但仍然没有休息。通常我会认为这样的事情是由于缺少运行时依赖项造成的,但我很肯定这不是这里的情况(已通过DependencyWalker验证)。编辑:我使用了SteveTownsend对CDB的推荐,现在我能够单步执行程序的预用户代码部分。最终的堆栈跟踪是:Child-SPRetAddrCallSite00000000`0008e308

c++ - Unix/C++ : Open new terminal and redirect output to it

我的程序(Solaris10上的C++)在从shell启动时通过wcout将输出写入其终端。但是,当我从SunStudio中执行它时,或者文件管理器没有终端,并且输出出现在SunStudio输出窗口中或根本不出现。我希望它在这三种情况中的任何一种情况下都打开自己的终端窗口,并将wcout附加到该终端窗口。我希望通过C++系统调用来完成程序本身,而不是通过某些shell或脚本执行程序的方式。因为在StudioIDE中执行并在文件管理器中双击仍然具有相同的效果。作为一名Windows程序员对我来说似乎很自然,但我无法在我的Unix书籍或Web中找到这是如何完成的。我是否请求了错误的东西,真

c++ - 升压程序选项 : Description too wide for terminal

我正在使用BoostProgramOptions来解析命令行参数(我不想错过它,因为它工作得很好)。但是,我有一个问题:Boost程序选项提供了为每个选项分配描述的可能性。Boost然后提供了可能性cout很好地显示帮助解释选项。但是,这些错误消息似乎被调整为80的终端宽度(我的结论是,对于80的宽度,换行符设置得很好)。如果我当前的终端有另一个宽度(特别是少于80列的终端),由于终端自动换行,显示的帮助看起来非常不自然。那么:有没有可能是Boost自动调整选项描述为当前终端宽度? 最佳答案 options_description接

c++ - 为什么没有调用 unexpected 函数?

我希望以下代码调用我的意外处理程序,但调用了我的终止处理程序:#include#includevoidmy_terminate(){std::cerrC++Builder6Developer'sGuide明确鼓励通过set_unexpected()安装自定义意外处理程序。我做错了什么,或者这只是C++-Builder6中的错误? 最佳答案 通过调用std::set_unexpected(对于std::unexpected)设置的处理程序将在抛出意外异常时调用;不是在未处理异常时。当违反动态异常规范时调用意外处理程序。举例说明;voi

c++ - 异常 - VC++2015 CTP Ultimate 中的不正确行为

我有一个程序:#includeusingnamespacestd;classTest{public:voidfunc(){cout我的预期是该程序将从main终止,但在VC++2015上maincout正在打印。这违反了我的理解,所以我用gcc编译了它在那里工作正常。这是VC++2015中的错误还是像这样的程序终止行为是未指定/UB行为?它是否应该执行cout?IDE:VS2015CTPUltimatePreview(30天)标志:/GS/analyze-/W3/Zc:wchar_t/ZI/Gm/Od/sdl/Fd"Debug\vc140.pdb"/fp:precise/D"_MBCS

c++ - 如何自定义未捕获的异常终止行为?

在g++和clang++中(至少在Linux中)在抛出异常但未捕获异常(未捕获的异常)后显示以下典型消息:terminatecalledafterthrowinganinstanceof'std::runtime_error'what():Bye例如:#includeintmain(){throwstd::runtime_error("Bye");}如何自定义错误消息,同时仍然可以完全访问抛出的异常?文档(http://www.cplusplus.com/reference/exception/set_unexpected/)提到了set_unexpected(和set_termina

C++ WINAPI : How to kill child processes when the calling (parent) process is forcefully terminated?

谁能告诉我如何在调用(父)进程被强制终止时终止子进程?顺便说一句,我无法更改子应用程序的源代码。我检查了StackOverflow中的现有线程,JobObject似乎是正确的方法。但是当我测试它时(使用控制台应用程序调用notepad.exe),我发现当控制台应用程序退出时,记事本没有。我使用CreateProcess生成新进程。我也看到有人说在父进程和子进程之间建立一个管道就可以了,但我还没有尝试过。如果有人能给我一些提示,我将不胜感激。更新:如果没有,WINAPIAssignProcessToJobObject将无法工作|在CreatProcess中创建CREATE_BREAKAW

c++ - abort() 和 terminate() "live"在哪里?

关于终止处理程序,据我了解,当代码中出现错误时,例如当我们没有捕获到异常时,terminate()被调用,后者又调用abort()set_terminate(my_function)允许我们获取terminate()以调用用户指定的函数my_terminate。我的问题是:这些函数“存在”在哪里,它们似乎不是语言的一部分,但就像它们存在于每个单独的cpp文件中一样工作,而无需包含任何头文件。 最佳答案 如果terminate和abort的默认处理函数不是您自己安装的,则它们必须位于编译器提供的运行时库中。通常,每个程序都链接到运行时

c++ - 线程: Termination of infinite loop thread in c++

我试图编写一个线程,该线程将在我的主程序的后台运行并监视某事。在某个时候,主程序应该向线程发出信号以使其安全退出。这是一个最小示例,该示例以固定的时间间隔将本地时间写入命令行。#include#include#include#include#includeintfunc(bool&on){while(on){autot=std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());std::coutfi=std::async(std::launch::async,func,on);std::this_thr