用于从C中的队列中删除项目的线程

时间:2013-08-06 03:07:45

标签: c linux pthreads

我只想将项目添加到队列中,并在队列中有东西时删除它们。我采取的方法是从堆栈中取出一些东西然后等待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;
        }
    }
}

2 个答案:

答案 0 :(得分:1)

  

睡眠实际上会暂停命令窗口。

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

另外,我建议使用互斥和条件变量来通知线程何时插入新项目。这样做“睡眠”方式应该可以,但它可能不会立即删除你想要的项目。

答案 1 :(得分:0)

也许您可以使用警报信号代替sleep().,只需为信号设置处理程序,并确保没有线程阻止它。