相关疑难解决方法(0)

整洁的异步IO代码

虽然异步IO(带有select/poll/epoll/kqueue等的非阻塞描述符)并不是Web上记录最多的东西,但有一些很好的例子.

但是,所有这些示例在确定了调用返回的句柄后,只有一个do_some_io(fd)"存根".它们并没有真正解释如何在这种方法中最好地接近实际的异步IO.

阻止IO非常整洁,直接读取代码.另一方面,非阻塞,异步IO是毛茸茸的,凌乱的.

有什么办法?什么是健壮和可读的?

void do_some_io(int fd) {
  switch(state) {
    case STEP1:
       ... async calls
       if(io_would_block)
          return;
       state = STEP2;
    case STEP2:
       ... more async calls
       if(io_would_block)
          return;
       state = STEP3;
    case STEP3:
       ...
  }
}
Run Code Online (Sandbox Code Playgroud)

或者(ab)使用GCC的计算得到的:

#define concatentate(x,y) x##y
#define async_read_xx(var,bytes,line)       \
   concatentate(jmp,line):                  \
   if(!do_async_read(bytes,&var)) {         \
       schedule(EPOLLIN);                   \
       jmp_read = &&concatentate(jmp,line); \
       return;                              \
}

// macros for making async code read like sync code
#define async_read(var,bytes) \
    async_read_xx(var,bytes,__LINE__)

#define async_resume()            \
     if(jmp_read) {               \
         void* …
Run Code Online (Sandbox Code Playgroud)

c c++ io asynchronous

24
推荐指数
2
解决办法
3万
查看次数

C++同时输入和输出到控制台窗口

我正在写一个服务器(主要用于Windows,但如果我可以保持多平台,这将很酷)我只是使用一个普通的控制台窗口.但是,我希望服务器能够执行诸如text_to_say_here或kick playername等命令.我怎样才能有异步输入/输出?我已经尝试了普通的printf()和gets_s的一些东西但是这导致了一些非常奇怪的东西.

我的意思是这样的事1

谢谢.

c++ io time asynchronous

7
推荐指数
2
解决办法
9446
查看次数

Cin无需等待输入?

对于我正在进行的项目,我需要程序能够接收来自用户的输入,但是当他们输入内容时,程序可以继续循环.

例如:
while (true)
{
    if (userInput == true)
    {
        cin >> input
    }
    //DO SOMETHING
}
Run Code Online (Sandbox Code Playgroud)

这意味着//DO SOMETHING每次循环都会发生这种情况,而用户不会按下百万次输入.

之前,我的解决方案是使用kbhit()getch()从conio.h 创建我自己的输入,但是这非常混乱,我不喜欢使用conio.h以便于携带等.此外,它不需要cin专门使用,因为那里是一个很好的机会它只是不能用它,所以任何好的解决方案,不需要我用"不太好"的库自己输入,将非常感激.

c++

5
推荐指数
1
解决办法
1万
查看次数

非阻塞工作室

我正在开发一个程序,它将从控制台接收用户输入并在单独的线程中打印出来。我想避免用户在输入内容的过程中出现 printf 出现并在光标处打印自身的情况。

有没有办法从控制台窗口执行 c 中的非阻塞 io?理想情况下,捕获按键或类似的操作,以便用户键入的内容不会出现在屏幕上。我正在 Ubuntu 中进行开发,最好不必使用 ncurses 之类的东西。

c unix multithreading nonblocking

4
推荐指数
1
解决办法
4443
查看次数

没有暂停代码的用户输入(c ++控制台应用程序)

如何在不导致代码停止执行的情况下输入输入?我一直在寻找答案,在过去的20分钟内没有结果.

cin >> string; 暂停代码AFAIK.

我需要使用多线程,还是有更好的方法?(我甚至不知道多线程是否有效.)

我最近开始学习c ++,至少可以说是初学者,所以请详细解释并包含我可能需要的任何库,谢谢.

c++ multithreading user-input cin console-application

0
推荐指数
1
解决办法
9532
查看次数