在C中链接任务指针



所以我试图在这里链接任务,但在linux下使用GCC编译时,我收到了警告:来自不兼容指针类型的赋值[默认启用]。尽管我只是在使用相同类型的指针。

typedef struct
{
    void (*routine)(void*);
    void* data;
    struct p_task* next;
    struct p_task* prev;
    int deadline;
    int timeWaiting;
}p_task;
typedef struct 
{   
    pthread_t mainThread;   
    pthread_t* threadArray;
    int threadCount;
    p_task* firstInLine;
    p_task* lastInLine;
}p_pool;

void pool_add_task(p_pool* pool, void* routine, void* data)
{   
    // create new task
    p_task* task = malloc(sizeof(p_task));
    task->routine = routine;
    task->data = data;
    task->deadline = 5;
    task->timeWaiting = 0;
    // when no tasks are chained yet
    if (pool->firstInLine == NULL) 
    {
        pool->firstInLine = task;
        pool->lastInLine = task;
    }
    else
    {       
        pool->lastInLine->next = task; // bad line 1
        task->prev = pool->lastInLine; // bad line 2
        pool->lastInLine = task; // new task is last in line
    }
}

这是因为struct p_task是前向声明的,因为在结构的定义中没有使用它。这意味着编译器不知道

  1. 它确实存在于所有

  2. 它与(馈送到)CCD_ 3类型的CCD_。

你需要写这个:

typedef struct p_task
{
    // etc.
} p_task;

相关内容

  • 没有找到相关文章

最新更新