草庐IT

信号灯

全部标签

c++ - 等待事件的线程并不总是捕获事件信号

我有一个应用程序,其中多个线程等待同一个事件对象发出信号。我看到的问题似乎是一种竞争条件,因为有时某些线程的等待状态(WaitForMultipleObjects)由于事件信号而返回,而其他线程的等待状态显然看不到事件信号,因为他们没有返回。这些事件是使用CreateEvent作为手动重置事件对象创建的。我的应用程序处理这些事件,以便在事件对象发出信号时,其“所有者”线程负责重置事件对象的信号状态,如以下代码片段所示。等待同一事件的其他线程不会尝试重置其信号状态。switch(dwObjectWaitState=::WaitForMultipleObjects(i,pHandles,F

c++ - 使用 Arduino 信号作为 PC 的输入?

我最近拿到了一个Arduino(Uno),我想知道一些事情。我的扬声器没有外部音量转换器,所以我想,也许可以将电位器连接到Arduino,然后用它来控制音量(在Windows中)。但这可能吗?要使用VisualC、C++(或更多“多平台”语言)读取Arduino引脚的值?然后使用它来设置Windows中的音量级别(如果可能的话,也可以在Linux中)。我认为这是可能的,因为如果你使用:Serial.println(analogRead([pinwithpotentiometer]));您可以将电位器的值传输到电脑(通过USB)。那么有什么方法可以在C或C++中读取这些值吗?我知道如何通

c - 如何在 C 语言的 Windows 上安装访问冲突错误的信号处理程序?

我有一个错误的应用程序引发了Windows上的访问冲突。这会在Windows上弹出“崩溃对话框”,我不希望它出现在用户的计算机上。在Linux上,我会为SIGSEGV安装一个信号处理程序,并在sighandler函数中安装exit(),但我在Windows上,我对WindowsAPI几乎一无所知。据我所知,当发生段错误时,Windows会抛出异常ACCESS_VIOLATION。我假设这是一个常规的C++异常并且可以捕获它,但我需要修补的程序是C语言,而不是C++。如何在Windows上安装“信号处理程序”?(假设信号的概念存在,考虑到signal()和friend是一个POSIXAP

c++ - 获取随机 SIGTRAP 信号(在 MinGW-gdb 中)是否是内存损坏的标志?

我编写了自己的引用计数内存管理器C++(为了好玩),我确信它并不完美;)。现在,当我尝试使用它时,我收到了随机的SIGTRAP信号。如果我注释掉与该内存管理器相关的每一行,一切都运行良好。获取SIGTRAP-s而不是SIGSEGV是很奇怪的。我知道当程序遇到断点时会抛出SIGTRAP-s,但没有设置断点。我在另一个线程中读到,exe和dll的调试版本必须是最新的。它们是最新的,所以这不是原因。有人知道为什么会这样吗? 最佳答案 在Google上搜索后,我意识到这些信号陷阱与您在MSVC++中收到的警告相同,提示“Windows已在x

c++ - 线程间通信。如何向另一个线程发送信号

在我的应用程序中我有两个线程一个大部分时间都很忙的“主线程”一个“附加线程”,它发出一些HTTP请求并阻塞直到它得到响应。但是,HTTP响应只能由主线程处理,因为它依赖于线程本地存储和非线程安全函数。我正在寻找一种方法来通知主线程何时收到HTTP响应和相应的数据。主线程应该被附加线程中断并尽快处理HTTP响应,然后从之前被中断的地方继续工作。我能想到的一种方法是附加线程使用SuspendThread挂起主线程,使用一些内联汇编器从主线程复制TLS,执行响应处理函数本身然后恢复主线程。我的另一种想法是,在第二个线程回调例程中的某个特定地址上设置一个断点,以便在第二个线程指令指针踩到该断点

c++ - Windows中是否有监视同步对象(互斥量、事件、信号量)的工具?

Windows中有没有监控进程同步对象状态的工具?即。事件/互斥:有信号或无信号信号量:计数更好的是,记录哪个线程做了什么,例如。“线程#5421信号事件-testevt” 最佳答案 MemoryValidatorProcessExplorerHandle用法:handle-s==>打印每种打开的句柄的计数。[编辑]:如何使用ProcessExplorer监控进程同步对象的状态。打开进程浏览器在进程部分单击您的exe(例如:MyApp.exe)单击ShowLowerPane(或按Ctrl+L)。这将显示所有同步对象。(例如:我的事件

windows - 获取扬声器音频信号,然后将其流式传输

我正在尝试构建我认为是基本的应用程序。嗯,两个应用程序,一个用于Windows,一个用于OSX。我想捕获正在播放的音频信号(即如果用户正在用他/她的扬声​​器播放音乐)。然后获取该信号并将其流出,以便另一台计算机可以“收听”。另一台计算机是Windows或OSX。关于如何获取音频信号有什么想法吗?在没有第3方插件的情况下流式传输音频的最有效方法是什么?如果有开源解决方案,我会很感兴趣。谢谢!克里斯 最佳答案 在WindowsXP上这根本不是微不足道的,因为如果不编写音频过滤器驱动程序就无法拦截输出信号(这对胆小的人来说不是什么好事)

c++ - 外部 dll 中缺少 Qt 信号

我在我的应用程序中使用的库irisxmpp库中有信号。在MacOSX和Linux上一切正常,但Windows会产生一大堆信号未找到警告。warning:QObject::connect:signalnotfoundinXMPP::AdvancedConnectorwarning:QObject::connect:signalnotfoundinXMPP::AdvancedConnectorwarning:QObject::connect:signalnotfoundinXMPP::AdvancedConnectorwarning:QObject::connect:signalnotfo

php - Windows上的信号处理

我有一个独立的PHP脚本,当发出“killsignal”时,我将处理从WindowsOS发送来的信号以进行正常关机。如何在Windows上执行此操作? 最佳答案 2020年3月更新:自PHP7.4起,存在sapi_windows_set_ctrl_handler()和sapi_windows_generate_ctrl_event。这使您的脚本可以处理Ctrl+C和Ctrl+Break按键,并为同一进程组中的其他进程生成它们。proc_open()还添加了create_process_group选项,以允许子进程处理CTRL事件。就

c++ - Windows/MinGW下相当于 "SIGINT"(posix)信号,用于捕获 "CTRL+C"

我正在windows下移植一个Linux/gcc程序,并为两者实现了常见的异常处理。我想知道什么是MinGW/gcc的SIGINT信号。这是我在Linux下的处理方式:staticvoidhandler(intsig){//Catchexceptionsswitch(sig){caseSIGABRT:fputs("CaughtSIGABRT:usuallycausedbyanabort()orassert()\n",stderr);break;caseSIGFPE:fputs("CaughtSIGFPE:arithmeticexception,suchasdividebyzero\n"