【发布时间】:2019-05-12 17:27:41
【问题描述】:
我基本上刚刚发现存在多线程编程,并且我在盲目地玩弄这个概念很有趣。
我正在尝试做的是一个计时器,它每秒动态检查一次,同时用户继续以某种形式与程序进行交互。
这是我目前能够完成的:
void* timer (void* threadToStop)
{
pthread_t* threadName = threadToStop;
time_t startTime = time(NULL);
time_t currentTime;
int elapsedTime;
int remainingTime;
do {
if (currentTime != time(NULL))
{
currentTime = time(NULL);
elapsedTime = currentTime - startTime;
remainingTime = 10 - elapsedTime;
printf("%d ", remainingTime);
fflush(stdout);
}
} while (remainingTime > 0);
pthread_cancel(*threadName);
return NULL;
}
void* func (void* vargp)
{
getchar();
return NULL;
}
int main(void)
{
pthread_t funcId;
pthread_create(&funcId, NULL, func, NULL);
pthread_t timerId;
pthread_create(&timerId, NULL, timer, &funcId);
pthread_join(funcId, NULL);
return EXIT_SUCCESS;
}
从两个不同的函数创建两个线程并开始同时运行。
"func" 只是一个要求用户输入字符的虚拟函数。这只是在计时器在后台运行时让用户与程序交互的一种方式。
"timer" 是不言自明的:它是每秒启动和更新计时器的函数。当这个线程被创建时,它也会得到func 的线程ID 作为参数。时间到了,我调用pthread_cancel 函数以停止使用其id 的func 的线程。
这个程序大部分时间都在工作:当我能够在控制台中输入字符时,计时器继续运行,当我按下回车键时,pthread_join 函数启动并且主要函数到达结束。但是,当计时器用完时,func 线程不会被取消,我很难弄清楚原因。
【问题讨论】:
-
请不要在给出 cmets 和/或答案后更改问题,因为这可能会使它们难以理解。而是用添加来更新您的问题。不过我会回滚你的最后一次更改。
-
对不起,这里还是个新手。
标签: c multithreading pthreads