在下面的教程中,我们将为数字秒表创建一个 C 应用程序。键盘命中函数缩写为 keyboardhit()
。按下一个键后,它会发出一个信号并输出一个不为零的整数。这其中有四个循环:第一个循环计数小时,第二个分钟,第三个循环,第四个循环保持秒的速度(3 个循环)。执行该程序后,当按下键盘启动键时会产生信号。有一个变量 (c) 用于存储键盘键;如果 C 等于 P 键,则调用等待函数。
线程
线程的另一个名称是轻量级进程。通过将一个进程分解为多个线程,旨在实现并行性。例如,浏览器中的许多选项卡可能表示各种线程。MS Word 使用多个线程,其中一个用于处理输入,另一个用于格式化文本。下面讨论了多线程的更多优势。
等待系统调用
在其子进程之一结束或收到信号之前,对 wait()
的调用将暂停调用方进程。在子进程退出后等待系统调用命令后,父进程继续运行。
子进程可能由于以下任何原因而结束:
- 从
main
函数开始,它调用exit()
; - 返回(整数)。
- 当收到信号(由操作系统或其他进程)时,其默认响应是终止。
示例代码:
#include <stdio.h>
#include <time.h>
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
等待线程在后台执行时按下开始(键盘上的任何键)键。按任意键后,线程再次跳转到线程连接功能;如果按下 p 键,则循环全部以零重新启动;如果触摸 S 键,线程将跳转到开始标签;如果按下 E 键,线程将调用 exit()
函数,终止程序。