Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 内核模块(Linux)中写入的中断能否通知Qt中正在运行的程序?没有用户空间程序等待/轮询?_C_Embedded Linux_Interrupt - Fatal编程技术网

C 内核模块(Linux)中写入的中断能否通知Qt中正在运行的程序?没有用户空间程序等待/轮询?

C 内核模块(Linux)中写入的中断能否通知Qt中正在运行的程序?没有用户空间程序等待/轮询?,c,embedded-linux,interrupt,C,Embedded Linux,Interrupt,内核模块发出的中断是否会通知用户空间中运行的Qt嵌入式程序?不使用ioctl的“wait\u event\u interruptable()” 我希望我的程序能够正常运行,而不必“等待”或进行轮询以检查是否发生了中断。一旦中断发生,程序就会做出反应 这个问题与我的问题类似,但他使用的是“wait\u event\u interruptable() 谢谢您也可以尝试使用netlink(libnl)。在驱动程序中,您只需要将消息单播到的pid编号。从应用程序中,您可以使用套接字的recvmsg()等

内核模块发出的中断是否会通知用户空间中运行的Qt嵌入式程序?不使用ioctl的“wait\u event\u interruptable()”

我希望我的程序能够正常运行,而不必“等待”或进行轮询以检查是否发生了中断。一旦中断发生,程序就会做出反应

这个问题与我的问题类似,但他使用的是“wait\u event\u interruptable()


谢谢

您也可以尝试使用netlink(libnl)。在驱动程序中,您只需要将消息单播到的pid编号。从应用程序中,您可以使用套接字的recvmsg()等待偶数发生

  • [app]---{向驱动程序发送消息}--->[driver](驱动程序现在知道pid并保存它)
  • [app]------{blocking recvmsg}------>正在等待引发事件

  • [app]您也可以尝试使用netlink(libnl)。在驱动程序中,您只需要将消息单播到的pid编号。从应用程序中,您可以使用套接字的recvmsg()等待偶数发生

    • [app]---{向驱动程序发送消息}--->[driver](驱动程序现在知道pid并保存它)
    • [app]------{blocking recvmsg}------>正在等待引发事件

    • [应用程序]您可以将信号排队(不是直接从处理程序,但您可以)。中断和信号处理程序调用之间会有一些延迟。你也可以让一个线程等待阻塞读取(即,成本极低),并在读取返回时设置一个标志。感谢大家的建议,伙计们将研究这两个问题。你可以让信号排队(不是直接从处理程序,但你可以)。中断和信号处理程序调用之间会有一些延迟。你也可以让一个线程等待阻塞读取(即,成本极低),并在读取返回时设置一个标志。感谢大家的建议,伙计们将研究这两个问题。我曾想过这样做,但是“你可以使用套接字的recvmsg()我仍然需要等待或轮询netlink套接字,以检查是否发送了消息这是@Chris Stratton在评论中提到的一种可能的解决方案,如果使用线程,它将在套接字的recvmsg()中阻塞,但在内核模块发送事件通知后将立即恢复。最好的部分是,您可以再次阻止该线程中的recvmsg(),以再次接收相同的事件发生,而无需向内核模块发送任何数据。我考虑过这样做,但是“您可以使用套接字的recvmsg()来等待偶数发生。”我仍然需要等待或轮询netlink套接字以检查是否发送了消息这是@Chris Stratton在评论中提到的一种可能的解决方案,如果使用线程,它将在套接字的recvmsg()中阻塞,但在内核模块发送事件通知后将立即恢复。最好的部分是您可以再次阻止该线程中的recvmsg(),以再次接收相同的事件发生,而无需向内核模块发送任何数据。