Articles of 阻塞

在socketclosures后,c ++ linux accept()阻塞

我有一个线程,侦听新的连接 new_fd = accept(Listen_fd, (struct sockaddr *) & their_addr, &sin_size); 另一个closuresListen_fd的线程closures程序的时候。 Listen_fdclosures后,它仍然阻塞。 当我使用GDB来尝试和debuggingaccept()不会阻塞。 我认为这可能是SO_LINGER的一个问题,但不应该默认开启,在使用GDB时不应该改变。 任何想法是怎么回事,或任何其他build议closures列表套接字?

如何在命名pipe道(mkfifo)上执行非阻塞fopen?

如果我有一个程序创build并试图使用mkfifo打开一个命名pipe道,我怎样才能打开pipe道读取或写入没有阻塞? 具体来说,我正在写一个C程序,可以使用或不使用gui(用Java编写)来运行。 在C程序中,我成功地使用mkfifo创build了命名pipe道,但是当我这样做时 FILE* in = fopen(PIPE_IN, "r"); /* Where PIPE_IN is the filename*/ 在GUI打开pipe道进行写入之前,fopen不会返回。 我希望做的是让pipe道准备被读取一次(如果)GUI决定写入它 – 我将把文件描述符放在一个select()调用中。 有理由期望java GUI可能永远不会被启动,所以我不能依靠它在任何特定点甚至根本上打开pipe道的另一端。 我也会有第二条pipe道,我想我也会遇到同样的问题。 此外,我不能在没有阅读器的输出pipe上设置O_NONBLOCK。 有什么build议么? (这是在Linux系统上运行)

可以阻止cin等待input吗?

在graphics应用程序中,我使用控制台input执行debugging命令。 在创build控制台时,还会创build一个新线程来收集处理所有input的用户命令,graphics应用程序将继续并行运行。 我使用boost :: thread库。 它到目前为止工作良好,但我还没有find一个很好的解决scheme来停止执行此线程。 线程始终在等待用户input: while(appRunning) { std::cin>>theUserCommand; // …do stuff } 然后,当graphics应用程序结束时,它将停止所有的控制台function,其中包括线程: appRunning = false; // do some more related clean up myListeningThread->join(); 正如你所看到的,std :: cin将在等待用户input,在联接被调用之后。 我尝试过的一个解决scheme是创build事件“合成键击”,std :: cin将得到你用ENTER发送的任何值,线程将很好地结束,这个解决scheme是可怕的,我不想保留它。 此外,它在工具执行的环境之一中工作,但当我尝试使用它与UI API一起使用失败。 你们能指导我如何以正确的方式解决这个问题? 如果在C ++文档中有一个函数可以阻止std :: cin等待用户input,并且只是继续执行程序,那么还不能确定地说: 编辑:很好,我发现keybd_event是有点误导一些环境,显式指定与WriteConsoleInputinput处理程序工作良好。

C ++ – Sleep()和cin如何工作?

只是好奇。 Sleep()函数实际上是如何工作的(在windows.h中声明的)? 也许不仅仅是这个实现,而是任何人。 我的意思是 – 它是如何实现的? 如何使代码在特定时间“停止”? 也好奇cin >>和那些实际上工作 。 他们究竟做了什么? 我知道如何“阻止”继续运行的唯一方法是使用while循环,但是考虑到这与处理从stdin读取方法时发生的情况相比,需要大量的处理能力(只是比较一段时间(真正)从标准input读取),我猜这不是他们做的。

Linux阻塞与非阻塞串行读取

我有这个代码在Linux下从串口读取,但是我不知道在读取串口时阻塞和非阻塞有什么区别,哪种情况更好?