C/C++ ncurses 冻结

C/C++ ncurses freeze

我目前正在试验一个小型 ncurses 应用程序。

应该 做的是通过串行接收消息,该消息用 : 分隔,然后它应该在单独的 windows 中显示不同的值。 我用 strtok "split" 它。

我的一切正常,除了 window 文本更新,它正确地更新了一个 window,而我一更新下一个 window 它就冻结了。 现在,我用这个尝试了很多不同的东西,并且不得不恢复到一种非常粗糙的方式只是为了简单化它。请看这段代码:

while(1){


read (fd, in,20);


s = strtok(in,":");




while (s != NULL)
{

    mvwprintw(winrpm,1,1,s);
    s = strtok(NULL, ":");
    mvwprintw(wintrans,1,1,s);
}

refresh();
wrefresh(winrpm);
wrefresh(wintrans);


//refresh();
}

如果我删除第二个 mvwprintw,一切都按预期工作,但有了那个,它在第一次更新后冻结。

有什么想法吗?我知道我应该包括我所有的代码,但它的 98% ncurses window 图纸和颜色等等..

你可以试试这个。如果第一个 strtok 不为 NULL,则将标记打印到 winrpm,while 将尝试获取另一个标记,如果成功,将打印标记到 winrpmwintrans.

while(1){

    read (fd, in,20);

    if ( ( s = strtok ( in, ":")) != NULL) {
        mvwprintw ( winrpm, 1, 1, s);
        while ( ( s = strtok ( NULL, ":")) != NULL) {
        {
            mvwprintw ( winrpm, 1, 1, s);
            mvwprintw ( wintrans, 1, 1, s);
        }
    }
    refresh();
    wrefresh(winrpm);
    wrefresh(wintrans);
}