睡眠时阻止标准输入

时间:2019-06-21 22:31:44

标签: c multithreading io stdin

我正在复制控制台蛇游戏,并且在阻止输入时遇到问题。

我创建了agetch ()函数,该函数在单独的线程中处理用户输入,在程序休眠时阻止输入,并返回字符代码。我在Linux中使用select ()而不是线程进行了尝试,但是遇到了同样的问题。我认为该功能非常糟糕,希望您能帮助我修复该问题:

#define nullptr ((void *) 0)

void* _agetch(void* arg)
{
    *(int32_t *) arg = getch();

    return nullptr;
}

int32_t agetch(uint32_t interval)
{
    int32_t status, status_addr;
    int32_t res = 0;

    pthread_t gp;
    status = pthread_create(&gp, nullptr, _agetch, &res);
    sleep(interval);

    if (res == 0)
        pthread_cancel(gp);
    else
        pthread_join(gp, (void**) &status_addr);

    return res;
}

int main()
{
    int32_t c;
    for (int32_t i = 0; i < 3; ++i) {
        c = agetch(3);
        if (c == 0) printf("Oops, timeout\n");
        else        printf("The char is %c\n" c);
    }

    return 0;
}

在开始的3秒内,我按了4次键盘(例如“ 42ne”),我期望:

The char is 4
Oops, timeout
Oops, timeout

但是我有:

The char is 4
The char is 2
The char is n

0 个答案:

没有答案