gpt4 book ai didi

c - 从 C 中的队列中删除项目的线程

转载 作者:太空宇宙 更新时间:2023-11-04 11:21:21 24 4
gpt4 key购买 nike

我只想将项目添加到队列中,并在队列中有内容时使用线程删除它们。我当时采用的方法是从堆栈中取出一些东西,然后等待 10 秒钟,然后再做一次。我只是不确定如何将其放入线程中。我在 PuTTy 上使用 C。我有违抗的功能。不想复制 thme 以节省空间。 delete() 只是删除第一个。我如何让线程暂停 10 秒。休眠实际上会暂停命令窗口。

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//#include <conio.h>

#define MAXQUEUE 100

struct queue
{
char name[256];
struct queue *link;
};

void *thread_routine(void *arg) {
int tr;
while(tr!=0) {
sleep(10);
delete();
}

}

struct queue *start=NULL;

int i=0;

void main() {

pthread_t thread1;
pthread_t thread2;
void *thread_result;
int status;
status = pthread_create(&thread1, NULL, thread_routine, NULL);
if (status != 0) {
printf ("thread create failed\n");
exit(1);
}
/* wait for the thread to finish */

status = pthread_join(thread1, &thread_result);
if (status != 0) {
printf ("thread join failed\n");
exit(1);
}
printf ("child thread finished: result = %d\n", (int) thread_result);

int ch;
while(ch!=4) {
printf("\nSelect an option:\n");
printf("1 to add an item to the queue\n");
//printf("2 to delete an item from the queue\n");
printf("3 to print the queue\n");
printf("4 for Exit\n");
scanf("%d",&ch);
switch(ch) {
case 1:
add();
break;
case 2:
delete();
break;
case 3:
print();
break;
case 4:

break;
default:
printf("Incorrect option\n");
break;
}
}
}

最佳答案

Sleep actually pauses the command window.

那是因为您加入了线程,也就是等待它完成。保持线程分离,并可能为阅读选项创建一个无限循环。

此外,我建议使用互斥锁和条件变量来通知线程何时插入新项目。虽然以“ sleep ”方式执行此操作应该可行,但它可能不会像您期望的那样立即删除该项目。

关于c - 从 C 中的队列中删除项目的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18071200/

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