0

我试图了解应用程序中线程的使用(我知道我正在做的事情在某种意义上可能是愚蠢的)并且我试图了解如何从创建的 main 结构中操作声明的变量线。到目前为止,我有:

typedef struct Chi_Server {

    int thread_status;
    int active_connections;

    pthread_t thread_id;
    pthread_attr_t thread_attribute;
    struct thread_info *tinfo;

} CHI_SERVER;

int main(void) {

    CHI_SERVER *chi_server;

    chi_server_start_server(chi_server);

    if (pthread_create(&chi_server->thread_id, (void *) &chi_server->thread_attribute, &chi_server_runtime, &chi_server)) {

        perror("Creating main thread");

    }

    initscr();
    noecho();
    cbreak();
    nodelay(stdscr, TRUE);
    keypad(stdscr, TRUE);
    curs_set(0);

    do {

        chi_server_time_alive(chi_server);
        chi_server_display(chi_server);

    } while (getch() != 113);

    nocbreak();
    endwin();

    chi_server_stop_server(chi_server);

    return 0;

}

void *chi_server_runtime(void *chi_server) {

    chi_server->server_stats.active_connections = 1;

}

我只是做了= 1,所以我可以看看结构变量是否可以在主中被操纵。到目前为止,我完全被难住了。有谁知道如何操作 main 中声明的结构?

4

2 回答 2

1

在 void *server_runtime(void *server) 中。您必须告诉 *server 是哪种类型。

我还没有看到你的服务器声明,但我想它看起来像这样

    int main()
    {
     struct yourstruct server;

      if (pthread_create(&server->thread_id, (void *) &server->thread_attribute, 
              &server_runtime, &server)) 
      {
          perror("Creating main thread");
      }

    }

    void *server_runtime(void *_server) 
    {
        struct yourstruct *server = _server;
        server->active_connections = 1;
    }

可能像往常一样错过了一些东西。祝你好运。

于 2013-07-09T18:03:29.243 回答
1

调用 pthread_create 时,您似乎对引用感到困惑;您的最后一个参数“&server”可能应该只是服务器。您不能像在 server_runtime 中那样取消引用指向 void 的指针。您应该将 struct Server 指针分配给 void 指针并使用它。

试试这个编译gcc -Wall thread.c -o thread -lpthread

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

struct Server {
    pthread_attr_t thread_attribute;
    pthread_t thread_id;
    int active_connections;
};

void * server_runtime(void *);

/* Error checking omitted for clarity. */
int main()
{
    struct Server *server;
    void *result;

    server = malloc(sizeof(struct Server));
    pthread_attr_init(&server->thread_attribute);
    pthread_create(&server->thread_id, &server->thread_attribute, server_runtime, server);
    pthread_attr_destroy(&server->thread_attribute);
    pthread_join(server->thread_id, &result);
    printf("%d\n", server->active_connections);
    free(server);

    return 0;
}

void * server_runtime(void *p)
{
    struct Server *server = p;
    server->active_connections = 1;
    return NULL;
}
于 2013-07-09T18:00:09.210 回答