当前位置: 首页 > wzjs >正文

外贸公司网站建设费用 如何申请网页游戏制作工具

外贸公司网站建设费用 如何申请,网页游戏制作工具,滦南县建设局网站,个人建设网站教程序言 在上一篇文章中,我们介绍了 线程的概念。在这篇文章中,我们主要介绍在 Linux 系统下对线程的控制。  通过上一篇的学习,我们了解到,在 Linux 中,是不存在真正意义的线程的,只有轻量级进程&#xff0c…

序言

 在上一篇文章中,我们介绍了 线程的概念。在这篇文章中,我们主要介绍在 Linux 系统下对线程的控制。
 通过上一篇的学习,我们了解到,在 Linux 中,是不存在真正意义的线程的,只有轻量级进程,所以我们需要借助 POSIX线程库


1. 线程的创建

 线程的创建我们需要使用函数:
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);,参数看起来还是比较多的,我们来一一解释一下:

  • pthread_t *thread:指向 pthread_t 类型的指针,用于存储新创建的线程的标识符,用于唯一标识一个线程。
  • const pthread_attr_t *attr:指向线程属性对象的指针,用于设置线程的各种属性(如堆栈大小、调度策略等)。如果传递 NULL,则使用默认属性。(大多数时候,我们使用默认就够了
  • void *(*start_routine) (void *):新线程将要执行的函数的指针。这个函数必须接受一个void * 类型的参数,并返回一个 void * 类型的值。这个参数和返回值可以用来在线程之间传递数据。
  • void *arg:传递给 start_routine 函数的参数。
  • 返回值:成功返回 0,失败返回错误。

举个栗子:

#include <iostream>
#include <string>#include <cerrno>
#include <unistd.h>
#include <pthread.h>void* thread_Func(void* arg) {  int* ptr = static_cast<int*>(arg);  // 更安全地将 void* 转换为 int*  if (ptr != nullptr) {  std::cout << "Hello, I am thread_" << *ptr << std::endl;  sleep(1);  // 暂停 1 秒  }  return nullptr;   
}int main()
{int id = 0;pthread_t tid = 0;// 创建线程int ret = pthread_create(&tid, NULL, thread_Func, &id);if(ret != 0){perror("pthread_create");exit(1);}return 0;
}

 一个简单的创建线程就完成啦,现在我们使用 g++ TestPthread.cc -o TestPthread 该指令生成可执行文件,发现报错了,错误信息是:

g++ TestPthread.cc -o TestPthread
/usr/bin/ld: /tmp/ccgvZbpw.o: in function main': TestPthread.cc:(.text+0xb0): undefined reference to pthread_create’
collect2: error: ld returned 1 exit status
make: *** [Makefile:2: TestPthread] Error 1

在之前我们学习动静态库中也出现过这个情况,这是因为 g++不认识这个库 ,所以默认不会链接 pthread 库,因此你需要显式地告诉编译器链接:
g++ TestPthread.cc -o TestPthread -l pthread


2. 线程的退出

 线程的退出,我们有三个方式:

2.1 return 函数

 当一个线程执行完毕时,就会执行熟悉的 return 函数退出线程。

2.2 pthread_exit 函数

 该函数 void pthread_exit(void *value_ptr); 可以和 return 函数达到平替的效果。

2.3 pthread_cancel 函数

 前两者都是自己退出,但是这个函数可以使指定线程进行退出:
int pthread_cancel(pthread_t thread);

  • thread: 想要终止线程的 ID
  • 返回值:成功返回 0 ;失败返回错误码

举个栗子:

.............// 创建线程int ret = pthread_create(&tid, NULL, thread_Func, &id);if(ret != 0){perror("pthread_create");exit(1);}if(pthread_cancel(tid) != 0){perror("pthread_create");exit(1);}.............

2.4 相关注意

 注意,线程的退出不能使用 exit 函数 !!!因为它不仅会终止当前线程,还会终止整个进程。想象一下,大家执行得好好的,一个人跑完了,一退出结果把大家全拉下水了。


3. 线程的等待

 和进程一样,线程在执行完毕时,也是需要回收的,不然 已经退出的线程,其空间没有被释放,仍然在进程的地址空间内。 我们使用函数:
int pthread_join(pthread_t thread, void **value_ptr);

  • thread:这是要等待的线程的标识符(ID)。
  • value_ptr:这是一个指向指针的指针,用于接收被等待线程的退出状态。如果调用者对此不感兴趣,可以传递 NULL
  • 返回值:成功返回 0,失败返回错误码。

举个栗子:

#include <cerrno>
#include <unistd.h>
#include <pthread.h>#include <iostream>  
#include <pthread.h>  
#include <unistd.h> // 包含 sleep 函数的定义  void* thread_Func(void* arg)   
{    int* ptr = static_cast<int*>(arg);  // 更安全地将 void* 转换为 int*    if (ptr != nullptr) {    std::cout << "Hello, I am thread_" << *ptr << std::endl;    sleep(1);  // 暂停 1 秒    }    // 返回一个全局或动态分配的整数,或者使用 pthread_exit 传递退出码  int* ret_ptr = new int(0); // 动态分配内存  return static_cast<void*>(ret_ptr); // 返回动态分配的整数的地址  
}  int main()  
{  int id = 0;  pthread_t tid;  // 创建线程  if (pthread_create(&tid, NULL, thread_Func, &id) != 0) {  perror("pthread_create");  exit(1);  }  // 线程等待  void *ptr = nullptr;  if (pthread_join(tid, &ptr) != 0) {  perror("pthread_join");  exit(1);  }  // 转换 void* 为 int* 并访问值  if (ptr != nullptr){  int* ret = static_cast<int*>(ptr);  std::cout << "Exit code is " << *ret << std::endl;  delete ret; // 释放之前动态分配的内存  }  return 0;  
}

在这里一定要注意,不要返回栈上的临时变量,这是不安全的也指针访问!!!


4. 线程的分离

 线程的等待是用于回收其他线程的资源,就像主线程是大哥大,其他线程就像小弟,被主线程派去干活,干的活结束还必须向大哥大(主线程)汇报情况。
 但是线程分离后,小弟我要单干了!没有必要向你汇报了,分离的线程在结束时会自动释放其占用的资源,不需要主动回收。
 相关函数是:int pthread_detach(pthread_t thread);

  • thread:要分离的线程的标识符(ID)。这个标识符是通过 pthread_create 函数创建线程时返回的。
  • 返回值:成功时,返回 0。出错时,返回错误码。

举个栗子:

#include <cerrno>
#include <unistd.h>
#include <pthread.h>#include <iostream>  
#include <pthread.h>  
#include <unistd.h> // 包含 sleep 函数的定义  void* thread_Func(void* arg)   
{    int cnt = 0;while(true){std::cout << "I am doing my job, pthread_id is 1!" << std::endl;if(cnt++ == 5){break;}sleep(1);}return nullptr;
}  int main()  
{  int id = 0;  pthread_t tid;  // 创建线程  if (pthread_create(&tid, NULL, thread_Func, &id) != 0) {  perror("pthread_create");  exit(1);  }  // 线程分离if(pthread_detach(tid) != 0){perror("pthread_create");  exit(1); }int cnt = 0;while(true){std::cout << "I am doing my job, pthread_main!" << std::endl;if(cnt++ == 5){break;}sleep(1);}return 0;  
}

 这样的话,主线程就可以干自己的事情去啦!


5. 总结

 这篇文中主要介绍了线程的基础控制,希望大家有所收获!


文章转载自:

http://qi7SxDNf.mxxsq.cn
http://qsFqLiTC.mxxsq.cn
http://84KLHoY9.mxxsq.cn
http://1tNrKucI.mxxsq.cn
http://r34h8jSB.mxxsq.cn
http://cPmoxQCN.mxxsq.cn
http://i43voRqR.mxxsq.cn
http://hgE3GdBb.mxxsq.cn
http://PQ84zl7K.mxxsq.cn
http://tapAx7uE.mxxsq.cn
http://q7zW8Yq5.mxxsq.cn
http://GiMMafoR.mxxsq.cn
http://q254IOhU.mxxsq.cn
http://2D0nic4L.mxxsq.cn
http://4fEXept2.mxxsq.cn
http://EiemIVQO.mxxsq.cn
http://e18H4b8N.mxxsq.cn
http://3RAyzmaj.mxxsq.cn
http://5CLMvgnm.mxxsq.cn
http://mDrHcJk2.mxxsq.cn
http://fEu7D4wW.mxxsq.cn
http://lrIAaVFw.mxxsq.cn
http://HIoo0Rps.mxxsq.cn
http://jNcTGItJ.mxxsq.cn
http://w2aKmLyT.mxxsq.cn
http://tnxaGRP9.mxxsq.cn
http://mZRDlYgX.mxxsq.cn
http://HGBenR7f.mxxsq.cn
http://z4dbtxxU.mxxsq.cn
http://Mrup2GNV.mxxsq.cn
http://www.dtcms.com/wzjs/735264.html

相关文章:

  • 网站系统灵活性龙之向导外贸官方网站
  • 深圳网站设计 建设元外贸交流软件有哪些
  • 个人网站注册平台当当网电子商务网站建设特点
  • 嘉兴手机模板建站网站建设j介绍ppt模板
  • 团购网站app制作企业网站建设劣势
  • 南宁做网站培训做美容一般在哪个网站团购比较好
  • 济南哪里有网站公司如何进入邮箱的网站
  • 教育网站建设的目的大伙房水库输水工程建设局网站
  • 本地推广找哪些网站企业邮箱免费版开通
  • 网站开发是无形资产重庆网站制作长沙
  • 个体搞网站建设 经营范围杭州网站建设索q479185700
  • 汕头哪里做网站wordpress数据库缓存
  • 孝感新闻门户网站企业所得税缴纳标准
  • 永久免费网站建设方案学生html个人网页代码
  • 大型企业网站建设深圳网站建设开发公司哪家好
  • 网页制作与网站开发模板服装企业网站模板
  • 花卉电子商务网站开发企业年报网上申报系统
  • 做芯片外贸生意上哪个网站wordpress关闭订阅
  • 免费做试卷的网站做系统的网站好
  • 漳州微网站建设哪家好交互式网站如何做
  • 阜新市项目建设网站直播平台搭建
  • sns网站是什么网页设计制作规范
  • 网站推广--html关键词代码解说各大网站做推广的广告怎么做
  • 做qq动图的网站北京 网站设计公司
  • 公司网站设计主页部分怎么做seo竞争对手分析
  • 达内网站开发视频教程网站找不到的原因
  • 阜阳h5网站建设wordpress搭建电商教程
  • 广州手机网站定制咨询哪些人做数据监测网站
  • 涪陵建设工程信息网站互联网论坛有哪些
  • 丹东建设银行网站广东企业微信网站开发