C语言 简单秒表程序
在下面的教程中,我们将创建一个数字秒表的C程序。键盘敲击函数被缩写为 keyboardhit()。按下一个键后,它发出一个信号并输出一个不为零的整数。这里面有四个循环:第一个循环计算小时,第二个循环计算分钟,第三个循环计算秒,第四个循环保持秒的速度(3循环)。在这个程序执行后,当键盘上的启动键被敲击时,会产生一个信号。有一个变量(c)用于存储键盘键;如果c等于p键,则调用等待函数。
线程
线程的另一个名字是轻量级进程。通过将一个进程分解成若干个线程,旨在实现并行化。例如,浏览器中的许多标签可能代表各种线程。MS Word使用多个线程,包括一个用于处理输入,另一个用于格式化文本。以下是对多线程的进一步优势的讨论。
等待系统调用
在其一个子进程结束或收到信号之前,对wait()的调用会暂停调用者的进程。子进程退出后,父进程在wait系统调用命令后继续运行。
子进程可能因为以下任何原因而结束。
- 从main,它调用exit()
- 返回(一个int)。
- 当收到一个信号时(由操作系统或另一个进程),它的默认反应是终止。
简单秒表的程序
#include
#include
int main()
{
printf("*#This is a stopwatch#*\n\n\n");
printf("**Press 'p' to pause.\n");
printf("**Press any key to start & to stop.");
getch();
system("cls");
printf("\t\t*#This is a stopwatch#*\n\n\n");
clock_t s, n;
s = clock();
while (1)
{
while (1)
{
n = clock();
printf("\r");
printf("Time-\t %d : %d : %d ", ((n - s) / 1000) / 60, ((n - s) / 1000) % 60, (n - s) % 1000);
if (kbhit())
break; // kbhit() does not read the character
}
if (getch() == 'p')
{
printf("\rTime-\t %d : %d : %d ", ((n - s) / 1000) / 60, ((n - s) / 1000) % 60, (n - s) % 1000);
getch();
}
else
break;
s = s + (clock() - n); // split time
// s=clock(); //lap time
}
printf("\rTime-\t %d : %d : %d ", ((n - s) / 1000) / 60, ((n - s) / 1000) % 60, (n - s) % 1000);
getch();
getch(); // to read the extra characters
printf("\n\n\n");
return 0;
}
输出
*#This is a stopwatch#*
**Press 'p' to pause.
**Press any key to start & to stop.
*#This is a stopwatch#*
Time- 0 : 7 : 784
解释
当线程在后台执行时,我们在等待start(键盘上的任意键)键被按下。按下any键后,线程再次跃迁到线程连接函数;如果按下p键,循环都以0重启;如果触及s键,线程跳到起始标签;如果按下e键,线程调用exit()函数,终止程序。