草庐IT

信号分配

全部标签

c++ - Winsock 接受事件有时会停止发出信号 (WSAEventSelect)

我对属于多线程套接字服务器的一段遗留c++/winsock代码有疑问。该应用程序创建一个线程来处理来自客户端的连接,通常一次有几百个连接。它通常可以毫无问题地运行数天(连续),然后突然停止接受连接。这只发生在生产中,从不测试。它使用WSAEventSelect()来检测FD_ACCEPT网络事件。连接处理程序的(简化)代码是:SOCKETlistener;HANDLEhStopEvent;//...initialiselistenerandhStopEvent,andotherstuff...HANDLEhAcceptEvent=WSACreateEvent();WSAEventSel

c - 当进程被终止时,有没有办法让线程从无限信号量等待中出来?

操作系统:Windows。语言:C我有一个线程通过TCP向服务器发送请求并在信号量上无限等待响应。还有另一个线程读取套接字,将接收到的数据复制到一个公共(public)缓冲区中,并使信号量发出脉冲以结束等待。这一切都很好。但在进程由于某种原因被终止的情况下,等待信号量的线程会一直等待,而其他线程将终止。为什么当进程被杀死时线程等待信号量没有结束?我在Linux论坛上读到有SEM_UNDO可以帮助解决这种情况。Windows上有类似的东西吗?任何解决方法? 最佳答案 Semaphoresdonothaveowners.如果您等待信号量

c++ - Windows中给进程分配内存时,是否总是会触发页面错误?

我正试图在操作系统级别深入了解Windows内存管理的内部机制。难道在分配内存时,总是在幕后触发页面错误吗?这是否意味着停止软页面错误的唯一方法是停止在进程内分配新内存?定义我将“内存分配”定义为任何形式的malloc,即new、LocalAlloc、VirtualAlloc、HeapAlloc等。我将“页面错误”定义为将内存从操作系统池映射到进程工作集的过程,该操作在高端Xeon上持续花费250us。 最佳答案 你需要非常清楚这里发生的不同事情。该进程有两个独立的部分,提交内存和将内存分页到进程中。这些都与调用malloc、Hea

c++ - 我应该将分配的内存归零吗?

我正在编程tcp套接字,我正在使用structsockaddr_inserver_addr;来设置端口等。在一些教程中我读到我应该将server_addr的内存清零在使用它之前。我是不是该?是否有可能我会得到一些可能导致问题的数据的内存?linux和windows有什么不同吗?谢谢 最佳答案 如果您不初始化保留内存区域,它将包含之前存储在那里的任何值。因此,将其“归零”始终是一个好主意,这意味着用一些值覆盖曾经存在的内容,在本例中为空字节\0。如果您将malloc替换为calloc,这将自动为您完成。无论您是否这样做,都不会影响您从

c++ - 为什么在我分配该类的两个对象时调用我的构造函数?

我很困惑,如果这是显而易见的,我很抱歉。以下是我错了吗:structMyStruct{MyStruct(){};MyStruct(MyStruct*arg){};}MyStruct(MyStruct*参数){};构造函数是否将一个指向MyStruct的指针作为参数?因为我有一个问题,当我这样做时,这个构造函数(我认为是)被调用了:intmain(){MyStructobj;MyStruct*objPtr;obj=objPtr;return0;}当将obj分配给objPtr时,我希望编译器会提示,但它没有,而是调用MyStruct(MyStruct*arg);我认为这是一个采用指针参数的

c++ - Windows上的大型连续虚拟内存分配

最近,我遇到了在具有16GB物理内存的64位Windows系统上分配大约4GB连续内存(物理或虚拟)块的需求。我尝试使用new[]分配此缓冲区,但是它抛出了std::bad_alloc。例如,以下失败:char*buffer=newchar[LARGE_BUFFER_SIZE];当我按块分配缓冲区时(我为一块使用1024字节),但是我可以达到4GB的内存。因此,以下代码不会失败:char**buffer=newchar*[LARGE_BUFFER_SIZE/CHUNK_SIZE];for(size_ti=0;i缺点是内存不连续。是否可以使用Windows提供的C或C++标准库例程或函数

python - 什么相当于使用 python 的 Windows 中的 sigusr1-2 信号?

拜托,我需要一些帮助。我正在努力在Windows中的两个python进程之间发送通知。我查看了信号模块,但不幸的是,Windows不支持用户定义的信号。Windows使用其他称为消息的东西,但我不知道它是如何工作的或如何在python中使用它。如果有人对在python中的进程之间发送消息有想法或起点,我们将不胜感激。 最佳答案 这实际上取决于您要寻找的是什么-您是想要控制消息、非阻塞消息,还是像通常使用signal模块那样捕获外部信号的能力。因为你想发送“两个python进程之间的通知”,我推荐multiprocessing.con

.net - Windows/.NET 负载分配和平衡

是否有经过审查的Windows友好型,甚至.NET原生的负载分配/负载平衡实用程序,与HAProxy一样?我们有一个.NET堆栈产品,我们从堆栈中跳出的一个部分用于负载平衡。我们需要一些具有可配置的分发规则的东西——也许是子域驱动的——NLB似乎无法单独提供。如果它直接与.NET集成,或者提供可由Web服务调用的公开API,那就更好了!提前致谢!澄清:我们需要在逻辑上分开盒子。这不仅仅是集群/故障转移/复制场景。进一步说明:我们是WCF之家。我们的网格上已经有一个自定义路由器和检查器。然而,我们需要在前端进行分发,这是HAProxy目前在我们架构中的位置。然而,我们需要一些我们不必编写

c++ - 信号处理程序与事件处理程序

最近在一次采访中,他们让我指出信号处理程序和事件处理程序之间的区别。我从未在Linux中遇到过事件处理程序,但在使用Google搜索后,我发现Windows中存在事件处理程序。我只想了解有关此问题的更多信息。欢迎提供任何信息。 最佳答案 我发现用户必须编写事件处理函数才能捕获事件,而内核为程序提供了默认的信号处理程序。事件处理程序负责处理程序外部的事件,如键盘中断、鼠标单击等。事件处理程序将在特定插槽上连续轮询以等待事件发生。所以在这里它可能会消耗CPU生命周期。信号处理程序还用于两个进程之间的进程间通信。用户可以为进程定义自己的信

c++ - 将 FILE * 或 HANDLE 转换(分配)到 Windows 中的 IStream

想要编写一个函数,该函数期望一个文件的打开句柄,并且出于某些目的将其转换为IStream以与Wrapper库进行交互我知道的一种方法是,我可以从HANDLE获得一个FILE*,但是我没有得到任何方法来将此FILE*或HANDLE直接转换或分配给IStream(COM)。 最佳答案 你可以试试getfilenamefromHANDLE然后createIStream从路径。 关于c++-将FILE*或HANDLE转换(分配)到Windows中的IStream,我们在StackOverflow