草庐IT

terminal-notifier

全部标签

c++ - notify_all 崩溃后直接删除 std::condition_variable_any

我有一部分代码,其中一个线程调用如下内容:cond->notify_all();deletecond;与std::condition_variable_anycond;Afaik,这应该有效,因为Ishouldbeallowedtodeletetheconditionvariable,assoonasInotifiedallthreadswaitingonit,他们不必从wait调用中恢复。在Windows上,这有时会因错误而崩溃:mutexdestroyedwhilebusy打印到标准输出在Linux上,使用clang3.5这工作得很好,在Windows上我使用VisualStudi

c++ - std::condition_variable::notify_all() 保证

假设一个条件变量上有N个等待线程(读者),它们被另一个线程(生产者)通知。现在,所有N个读者都将尝试拥有他们引用的unique_lock,一次一个。现在假设生产者出于某些原因想要再次锁定同一个unique_lock,甚至在任何被唤醒的读者开始拥有锁之前。按照标准,只有在所有被通知的读者都开始锁定步骤后,生产者才能成功(尝试)进入其临界区吗? 最佳答案 除了§1.10第2段中给出的相当模糊的调度之外,没有关于调度的保证:Implementationsshouldensurethatallunblockedthreadseventual

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++ - std::condition_variable wait() 和 notify_one() 同步

前言:我在这里看到过类似的问题,但似乎没有一个能回答我的问题。是否有可靠的方法来确保消费者线程中的wait()方法在生产者线程的第一个notify_one()调用之前被调用?即使在消费者线程中使用unique_lock,也有可能生产者线程会先运行,锁定互斥量并在消费者调用之前调用notify()wait(),因此,我的应用程序将缺少第一个notify()调用。编辑:感谢您的所有回答,它们确实帮助了我。我的问题是这个消费者循环中的第一个wait-notify():while(!timeToQuit){gdcv.wait(gdcondlock);gdlock.lock();//spurio

c++ - 使用 notify_listener - libpqxx

我正在尝试使用libpqxx来监听通知事件.我从一个扩展pqxx::notify_listener的例子开始。#include#include#includeclassFoo:publicpqxx::notify_listener{public:Foo(pqxx::connection_base&c):pqxx::notify_listener(c,"listen"){}virtualvoidoperator()(intid){std::cout虽然我无法让它工作。我尝试将名称参数切换为pqxx::notify_listener(c,"my_schema"),pqxx::notify_

c++ - Q_PROPERTY NOTIFY 信号及其参数

我习惯用参数编写我的“propertyChanged”signal,这样接收端就不需要调用Q_PROPERTY的READ功能显式。我这样做是为了清楚起见,并假设在QML数据绑定(bind)情况下,不需要对getter进行“昂贵的”调用来实际获取值,因为它已经作为信号参数传递给QML。我的同事不同意并说这违反了“QML风格”,对此我的回应是文档明确指出它可能有一个参数将采用底层成员的新值:NOTIFYsignalsforMEMBERvariablesmusttakezerooroneparameter,whichmustbeofthesametypeastheproperty.Thepa

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