簡體   English   中英

將argc和argv傳遞給c中的線程

[英]Passing argc and argv to a thread in c

我試圖用圖形界面在C語言中編寫聊天記錄。 一方面,我有一個聊天的客戶端,另一方面,我有一個GTK應用程序來顯示我的聊天。 要同時運行它們,我將使用pthread(歡迎使用其他建議。)

我的問題是我需要argc和argv才能使客戶端正常工作。 從我看到的情況來看,pthread_create()將要執行的函數作為參數,並且僅接受一個參數。 從其他主題中可以看出,我可以使用數據結構來包含它們兩者,但是似乎無法正確地將它們強制轉換。 這是我所擁有的:

typedef struct {
    int *argc;
    char ** argv;
} args_list;

void * simple_client(void * arg){
    int argc = (int) arg->argc;
    char * argv[] = (char *) arg->argv;
    printf("in thread : %d / %s, %s \n", argc, argv[0], argv[1]);

    return 0;
}

int main(int argc, char * argv[])
{   
    printf("int main : %d / %s, %s \n", argc, argv[0], argv[1]);
    args_list * args = malloc(sizeof *args);
    args-> argc = &argc;
    args-> argv = &argv;

    pthread_t thread1;

    if (pthread_create(&thread1, NULL, simple_client, args)) {
        perror("pthread_create");
        return EXIT_FAILURE;
    }
    if (pthread_join(thread1, NULL)) {
        perror("pthread_join");
        return EXIT_FAILURE;
    }
    return EXIT_SUCCESS;
}

由此,我得到了:錯誤:從int argc =(int)arg-> argc;請求的不是結構或聯合的成員'argc'; 和來自char * argv [] =(char *)arg-> argv的argv相同;

是什么導致這些錯誤? 您認為這是與GTK gui進行在線聊天的好方法嗎?

提前致謝

如此定義struct

typedef struct tARGS
{
    int argc;
    char **argv;
} ARGS;

然后,在main

ARGS args;
args.argc = argc;
args.argv = argv;

從技術上講,實際上並不需要argc ,因為以下代碼將處理args中的每個參數(根據C標准, argv[argc]是保證為空的指針):

ARGS args = *(ARGS *)arg;
while(*args.argv)
{
    puts(*args.argv);
    args.argv++;
}

這里的一些類型問題。

simple_client取一個void* 為了將傳入的值用作arg_list ,您需要將其arg_list為1。

void * simple_client(void * argp){
    arg_list* arg = (arg_list*) argp;

您不需要arg_list的額外間接arg_list 它應包含與main參數相同的類型。

    //in main:
    args->argc = argc; 
    args->argv = argv; 

    //in simple_client:
    int argc =  arg->argc;
    char** argv = arg->argv;

在原始代碼中,您將“指向char *的指針的地址”存儲在“指向char *的指針”中。

暫無
暫無

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

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