我只想将项目添加到队列中,并在队列中有东西时删除它们。我采取的方法是从堆栈中取出一些东西然后等待10秒,然后再做一次。我只是不确定如何将它扔进线程。我在PuTTy上使用C.我的功能无视。不想复制过来节省空间。 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;
}
}
}
答案 0 :(得分:1)
睡眠实际上会暂停命令窗口。
那是因为你加入了线程,等待它完成。保持线程分离,并可能为读取选项创建一个无限循环。
另外,我建议使用互斥和条件变量来通知线程何时插入新项目。这样做“睡眠”方式应该可以,但它可能不会立即删除你想要的项目。
答案 1 :(得分:0)
也许您可以使用警报信号代替sleep().
,只需为信号设置处理程序,并确保没有线程阻止它。