gpt4 book ai didi

C pthread_create

转载 作者:行者123 更新时间:2023-11-30 15:51:35 29 4
gpt4 key购买 nike

typedef struct client
{
pthread thread;
Window_t *win
}client;

client * client_create(int ID)
{
client *new_Client = (client *) malloc(sizeof(client));
char title[16];

if (!new_Client) return NULL;

sprintf(title, "Client %d", ID);

/* Creates a window and set up a communication channel with it */
if ((new_Client->win = window_create(title)))
return new_Client;
else {
free(new_Client);
return NULL;
}
}

当用户输入“e”时,我尝试使用新客户端和窗口创建一个新线程,这就是我的 int_main。该标志只是告诉我用户输入了 e

if(eflag == 1)
{
client *c = NULL;
c=client_create(started);
pthread_create(&c.thread, NULL, client_create, (void *) &started);
started++;
eflag =0;
}

这应该在新窗口的新线程上创建一个新客户端,但它没有这样做。

我不确定要在 pthread_create 中放入什么,也不知道如何获取新的 client 实例,因为 client_create 函数会创建一个新窗口。当我尝试通过 pthread_create 创建一个新线程时,它也会创建一个新窗口...如果这是 java oeverytime 用户按下 'e' 我只会创建类 client 的一个新实例...但我可以'在这里真的不这样做。有什么建议么?

最佳答案

pthread_create函数的原型(prototype)为

int pthread_create(pthread_t *restrict thread,
const pthread_attr_t *restrict attr,
void *(*start_routine)(void*), void *restrict arg);

你的start_routine定义需要匹配void *(*start_routine)(void*)..并且它在新的线程上下文中执行。

void *my_client_routine(void *arg) {
while(1) {
// do what each client does.
}
}

当前在 main() 中,您正在执行 create_client 函数两次。一次是在调用 pthread_create() 之前,一次是作为 pthread_create 生成的新线程的一部分。您可能想要做的是

  c = create_client()
pthread_create(&c.thread, NULL, my_client_routine, &args_that_client_routine_needs);

关于C pthread_create,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15017182/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com