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_create函数创建了一个新窗口。当我尝试通过pthread_create创建一个新线程时,它也会创建一个新窗口...如果这是java oeverytime,用户按下'e'我只会创建一个类客户端的新实例...但我可以'我真的这样做。有什么建议?
答案 0 :(得分:1)
pthread_create函数的原型是
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);