gpt4 book ai didi

c - 非阻塞输入 C

转载 作者:可可西里 更新时间:2023-11-01 11:44:51 24 4
gpt4 key购买 nike

我正在尝试创建一个程序,向用户提出问题并有几秒钟的时间回答问题,否则程序会停止输入。

现在我的问题是我无法让我的程序不阻止输入。我能够输入数据,但当我不输入并且计时器用完时,它会一直要求输入。

我在 Windows 上运行并使用 Code::Blocks 以防它很重要。如果有人可以向我解释我做错了什么,将不胜感激。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <pthread.h>
#include <conio.h>

int key = 0;
int GradeTotal = 0;

//runs an empty loop every iteration F.E. for loop
void timer(int seconds)
{
clock_t wait = (clock() + (seconds * CLOCKS_PER_SEC));
while(clock() < wait){}

}

void timeleft()
{
int index;

for(index = 5; index >= 0; index--)
{
if(key != 0)
{
pthread_exit(timeleft);
}

timer(1);

if(index == 0)
{
printf("\n\nTime's up!");
}
}
}

void questions()
{
int key;

printf("what is 1 + 1?\nAnswer: ");

while(1)
{
if(_kbhit())
{
key = _getch();
printf("%c",key);
break;
}
}
if(key == 50)
{
GradeTotal += 1;
}
}


int main()
{
pthread_t thread1,thread2;

int index;
int seconds = 0;
pthread_create(&thread1, NULL, questions, NULL);
pthread_create(&thread2, NULL, timeleft, NULL);
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);

printf("\n\nGrade: %d",GradeTotal);

return 0;
}

最佳答案

当时间用完时,timeleft() 设置一个全局标志,由questions() 测试,如果设置则使代码离开while (1)循环。

确保使用互斥体保护对标志的访问。

谈论“ protected 访问”:key 是在没有保护的情况下并发访问的。不好。

关于c - 非阻塞输入 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48021828/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com