
2. 匿名管道在无数据的情况下读数据是阻塞式的
3. printf是带有缓冲区的,因此会等到缓冲区满后才会输出,产生了同步的假象
注意:在实时性高的场合下,通过匿名管道进行标准输出重定位,每次printf()后,请调用fflush(stdout)强制刷新缓冲区,问题解决!
你的if(!ReadFile(hRead,buf,100,&dwRead,NULL))(包括if(!WriteFile(hWrite,buf,strlen(buf)+1,&dwWrite,NULL)))方法是同步的,它只有在读取到数据或者出现问题的时候才会返回,因此你说的“再点击读取就会假死”其实是readfile函数阻塞了,一直在等待。
而你再次写入数据的时候,readfile就能够读取到数据,也就退出阻塞状态,返回了。
你可以用ReadFileEx,它是异步的,命名管道是可以用的,但是我不是很清楚匿名管道能不能用,你自己试试,或者干脆就使用命名管道方式
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)