In ncurses you can call
wtimeout(win, 1000);
nodelay(win, TRUE);
And getch() will be nonblocking afterwards. On PDCursesMod it will still be blocking afterwards. I didn't test how it interacts with halfdelay(). Neither did I test whether ncurses applies the 1000ms timeout again after nodelay(win, FALSE).
Workaround: Use wtimeout(win, 0) consistently instead of nodelay(win, TRUE).