The callback of "out_cb" is convenience to use, but has performance issue:
Gui gets freezed if the background job continues outputing massive data (eg, 
grep a high frequency word "to" on the documents root, or some crazy stl 
errors).

Vim is busy in receiving the data and invoking "out_cb" which cause gui no 
responsed for a very noticeable period.

The practice way to prevent gui freeze is introducing a flow control for 
background process by reading the fixed number of lines from the channel on a 
timer (eg, read 50 lines from stdout each 100ms interval).

If the grep output is faster then the reader in the timer, system pipe will be 
full and "invoking write()" will block the child process until the system pipe 
buffer has free space again (some data have been readed out by vim).

In order to process the job output more smoothly, I tried to use this approach 
but when I am ready to read data from the channel in a timer, It is confused 
that both "\n" (empty line) and "not enough data" return "" from ch_read().

If I want to read out at most 100 lines from a channel in an interval, how can 
I tell if there is no data at the moment or it's just a "\n" from child process 
?

No clue to decide whether to continue reading or just break out.

When I am using "(pipe object).readline()" from python's subprocess module, 
"abc\n" means a line "abc", "\n" means an empty line and "" means not enough 
data. It's very simple without any ambiguity.

But when I am using "ch_read()" in vim. "abc" means a line "abc", and both 
(empty line) and (no message) return "".

Is it a "logic fallacy" of "ch_read()" ??

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui