簡體   English   中英

如何創建結構並通過pthread_create()傳遞到新線程

[英]how to create a struct and pass to a new thread via pthread_create()

我在需要寫的地方有一個回調函數:

1創建一個結構
2創建一個新線程並將此結構傳遞給該線程以供其專用
3從該回調函數...返回指向該結構的指針...到主程序。

這將允許通過原始程序和新線程之間的共享內存進行通信。

我假設我必須使用malloc,因為在回調函數中創建的結構的作用域僅在該函數中。

我不能使其成為靜態,因為我將創建多個線程,每個線程都具有自己的個人結構。

因為我是新手,所以我需要了解該過程。

這樣行嗎?

1 malloc分配一塊內存“ sizeof”該結構。
2將指向該塊的指針傳遞給新線程,並將其返回到主程序。
3在新線程中一次使用此內存創建新結構嗎?

我已經搜索了一個星期,看不到應該怎么做。

順便說一句:我不能修改設計單線程的主程序。 我只能使該回調函數產生許多新線程之一,並通過該共享內存(我想成為一個結構)進行通信。

謝謝。

struct myStruct
{
    int elem1;
    int elem2;
    int elem3;
};



int* callBack(some parameters)
{
    *p = malloc(sizeof(myStruct));

    result = pthead_create( ??, ??, void *(*newThread), *p);

    return p;
}


void newThread()
{
    // pull off *p from stack?

    // somehow use the declared struct to access the malloc mem

    p->elem1 = p->elem2 + p->elem3;
}

通過pthread_create()創建的線程將void*作為其參數,因此線程例程的原型應如下所示:

void newThread(void* data)

然后,該void*對應於作為最終參數傳遞給pthread_create的指針。 然后,您可以將此指針轉換為適當的數據類型(但請確保獲得正確的數據類型!)。 示例如下:

void newThread(void* data)
{
    struct myStruct* p = data;
    p->elem1 = p->elem2 + p->elem3;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM