|
藍森林 http://www.lslnet.com 2006年6月6日 10:18
curses不支持多進程嗎?
當子父進程同時寫的時候,位置好像亂了。不知道CURSES是不是不能用於多進程。請問哪位高人指點以下。
我的代碼如下:
if(fork()==0)
{
mvaddstr(0,0,"sub print");
refresh();
exit(0);
}
else
{
sleep(1);
mvaddstr(0,0,"par print");
refresh();
}
結果是:在(0,0)出打印:sub printpar print。
請問該如何處理父子進程同時打印屏幕?謝謝!
:em02: :em02: :em02: :em02: :em02: :em02: :em02: |
curses不支持多進程嗎?
沒人高見嗎?
55555555555555555555。。。。。。。。 |
curses不支持多進程嗎?
當多個進程同時訪問一個不能同時訪問的資源的時候,
一定要做好互斥操作。
這不是簡單的 sleep() 一下的問題。 |
curses不支持多進程嗎?
我的sleep()只是為了測試,當不加的時候就是在(0,0)處打印par printsub print,其實父子進程都在不同的變量stdscr上操作,按照道理說是沒有問題的,但是為什麼其打印結果卻這樣。
我的想法是其最後看到的結果應該是在(0,0)處,要麼打印」sub print「,要麼打印"par print「,而不是像現在這樣。 |
curses不支持多進程嗎?
哦,父子進程都執行:
if(fork()==0)
{
mvaddstr(0,0,"sub print");
refresh();
exit(0);
}
else
{
sleep(1);
mvaddstr(0,0,"par print");
refresh();
}
你說誰會先執行呢, |
curses不支持多進程嗎?
好像是這樣的,我覺得。
refresh()函數的作用是將stdscr->;_y這一字符串寫到終端監視器。所以而父子進程是共享stdout的,所以當子進程完成寫stdout後,子進程變量stdscr->;_y的值還在緩衝中;當父進程寫stdout時就是接著子進程的緩衝後繼續寫的,所以就出現了sub printpar print.
如果在refresh()後加上fflush(stdout),像這樣:
if(fork()==0)
{
mvaddstr(0,0,"sub print");
refresh();
fflush(stdout);
exit(0);
}
else
{
sleep(1);
mvaddstr(0,0,"par print");
refresh();
fflush(stdout);
}
這樣的結果就是先在(0,0)處打印sub print,然後在(0,0)處打印par print了。
不知道我說的對不?請高人發表意見!
wangshim_ 老兄,如果在父進程有sleep(1)的話,因為父進程要sleep就子進程先執行了;如果沒有sleep,則誰先執行就不一定了。 |
| |