当前位置:首页 > 编程笔记 > 正文
已解决

创建线程工具函数

来自网友在路上 159859提问 提问时间:2023-10-21 19:58:00阅读次数: 59

最佳答案 问答题库598位专家为你答疑解惑

这段代码是一个用于创建线程的工具函数。下面是代码的详细解释:int tool_CreateThread(void *(*ThreadBody)(void *), void *pPara, pthread_t *pPid, size_t iSize)
{pthread_t ThreadId;// 创建并初始化线程属性对象pthread_attr_t attr;pthread_attr_init(&attr);// 设置线程作用域为系统范围(PTHREAD_SCOPE_SYSTEM),即可以在不同的CPU核上运行pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM);// 设置线程为分离状态,即线程结束后会自动释放资源pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);// 获取当前线程栈大小size_t stack_size;int status = pthread_attr_getstacksize(&attr, &stack_size);if (status != 0){LogError("pthread_attr_getstacksize, errno-%d err-%s!", errno, strerror(errno));return -1;}// 设置线程栈大小status = pthread_attr_setstacksize(&attr, iSize);if (status != 0) {LogError("pthread_attr_setstacksize, errno-%d err-%s!", errno, strerror(errno));return -1;}// 创建线程,并指定线程入口函数和参数if(pthread_create(&ThreadId, &attr, ThreadBody, pPara) == 0)//创建线程{pthread_attr_destroy(&attr); // 创建成功后销毁线程属性对象if(pPid != NULL){*pPid = ThreadId; // 将创建成功的线程ID返回给调用者}LogNotice("tool_CreateThread:create pthread success. stack size:[%dKB].\n", iSize/1024);return 0;}pthread_attr_destroy(&attr); // 创建失败后销毁线程属性对象return -1;
}

这个函数的作用是创建一个新的线程,主要包含以下步骤:

  1. 初始化线程属性对象,并设置线程作用域为系统范围(PTHREAD_SCOPE_SYSTEM)。
  2. 设置线程为分离状态,即线程结束后会自动释放资源。
  3. 获取当前线程栈大小,并设置新线程的栈大小。
  4. 调用pthread_create函数创建新线程,指定线程入口函数和参数。
  5. 如果线程创建成功,将线程ID返回给调用者,并打印成功信息。
  6. 如果线程创建失败,则返回-1。

需要注意的是,该函数在创建线程后会销毁线程属性对象,而不会等待线程结束。所以创建的线程是分离状态的,线程结束后会自动释放资源。

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"创建线程工具函数":http://eshow365.cn/6-21009-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!