草庐IT

POSIX信号量

全部标签

c++ - ReleaseSemaphore 不释放信号量

(简而言之:main()的WaitForSingleObject卡在下面的程序中)。我正在尝试编写一段代码来分派(dispatch)线程并等待它们完成后再恢复。我没有每次都创建线程,这很昂贵,而是让它们休眠。主线程创建X个处于CREATE_SUSPENDED状态的线程。同步是使用X作为MaximumCount的信号量完成的。信号量的计数器被归零,线程被分派(dispatch)。线程执行一些愚蠢的循环并在它们进入休眠之前调用ReleaseSemaphore。然后主线程使用WaitForSingleObjectX次来确保每个线程都完成了它的工作并且正在休眠。然后它循环并再次执行所有操作。程

python - 从 Python 终端的关闭事件中获取信号

我如何制作一个仅通过终端(无GUI)运行的python脚本,以便在按下顶部的红色X时不退出,而是为该信号分配一个函数,最终将关闭窗口和进程(类似于退出时的警告对话框,但基于终端)? 最佳答案 一般来说,您可以使用atexit模块注册要在退出时调用的函数:try:_count=int(open("/tmp/counter").read())exceptIOError:_count=0defincrcounter(n):global_count_count=_count+ndefsavecounter():open("/tmp/coun

linux - 如何获得捕捉 SIGABRT 的信号

我正在trycatch一个信号,以便让我们的程序正常退出。当我们读取一个我们无法控制的坏文件时,就会发生SIGABRT。这是一个多平台程序,因此我们需要可以在Windows、Linux和Mac上运行的程序。出于某种原因,当我在signalhandlingexample添加一个signal_callback_handler时,并在Windows中运行问题测试,它仍然像我们之前那样出现中止弹出框。如何在中止弹出窗口发生之前重定向?我希望我们的程序正常退出。//constructorexample::example(conststringtheString){signal(SIGABRT,s

c++ - 有没有办法获取在处理信号期间访问的指针?

大概代码是这样的:#includevoidSegmentationFaultHandler(intsignal){if(signal==SIGSEGV){//howtocheckhereifit'sactualnullpointer?Throw(NullPointerException,"Objectpointernotsettoaninstanceofanobject.");}elseThrow(InvalidOperationException,"Signalhasbeeninterceptedbywrongfunction.");}intmain(){signal(SIGSEGV

python - atexit 处理程序不响应信号

我有两个python文件:a.py:importsubprocess,time,os,signalmyprocess=subprocess.Popen("b.py",shell=True)time.sleep(2)os.kill(myprocess.pid,signal.SIGTERM)b.py:importatexitdefcleanup():print"Cleaningupthingsbeforetheprogramexits..."atexit.register(cleanup)print"Helloworld!"whileTrue:passa.py正在生成b.py并在2秒后终止

windows - Git 对 POSIX 功能的依赖在 Windows 上仍然是一个问题吗?

据我所知,Git似乎严重依赖POSIX特定的功能,导致Windows上出现兼容性问题。但是,我并不具体了解Git使用的哪些POSIX功能无法在Windows上轻易复制。由于这个问题,我一直很犹豫是否要在我的Windows计算机上开始使用Git。Git使用了哪些POSIX特性,这仍然是一个问题吗?像msysGit这样的项目是如何设法规避这些问题的? 最佳答案 是的,Git确实依赖于POSIX系统,但请注意POSIXspecifiesalotofthings:shell环境(即命令行环境)、操作系统接口(interface)(即实现文件

c - 如果WriteFile同步完成,是否发出信号通知事件

如果WriteFile函数同步完成并成功,则是否通过lpOverlapped参数传递了通过事件传递的信号?如果事件同步失败,是否会向事件发出信号?我已经打开了带有FILE_FLAG_OVERLAPPED标志的文件的句柄。我无法从文档中弄清楚这一点,也无法在代码中轻松地复制这种情况。 最佳答案 首先,这个问题不仅与WriteFile有关,而且与任何异步I/O函数有关-几乎所有获得OVERLAPPED结构指针的函数。因为为所有这些功能分配了IRP(I/O请求数据包)(在wdm.h中查看它的定义)。hEvent中的OVERLAPPED句柄

windows - Windows 中的进程间信号量

在WindowsAPI中是否有任何类型的进程信号量?我找到了thisone但据我了解,这仅适用于线程,在此先感谢您的帮助 最佳答案 查看CreateSemaphore()函数的帮助:http://msdn.microsoft.com/en-us/library/ms682438(v=VS.85).aspx在备注部分,从“多个进程可以处理...”开始。您会在那里找到3个案例-所有案例都很有用。 关于windows-Windows中的进程间信号量,我们在StackOverflow上找到一个类

c - 将 POSIX C 代码移植到 Windows

我刚刚完成了一个用C编写的小项目,我从串口读取数据流并解析传入的数据。该软件是为POSIX系统(使用termios)编写的,并遵循使用串行i/o的标准步骤使用open()打开串口设备配置通信参数(termios)在文件句柄上设置阻塞模式(fcntl)在串行接口(interface)上​​执行read()。完成后在串行接口(interface)上​​执行close()。除了套接字部分,代码是直接的ANSIC。我的问题是,要使代码在Windows平台上运行有多复杂。该端口不会由我编写,我只想向可能有兴趣移植它的其他人提供一个指示(即微不足道,不那么微不足道,撕裂你的眼睛会引起精神错乱)。此

linux - 为什么我遇到 Linux 信号处理的意外行为?

我生活的环境有Win7/MSVC2010sp1,两个不同的Linux机器(RedHat)g++版本(4.4.7、4.1.2)和AIXxlc++(08.00.0000.0025)。不久前,有人要求我们将一些代码从AIX转移到Linux。很快就发现Linux有点不同。通常当一个信号被抛出时,我们处理它并抛出一个C++异常。那没有按预期工作。Longstoryshort,throwingc++exceptionsfromasignalhandlerisn'tgoingtowork.一段时间后,我整理了一个修复程序,使用setjmp/longjmp将异常移出处理程序。经过一些测试,该死的东西适