WIN32线程控制主要实现线程的创建、终止、挂起和恢复等操作,这些操作都依赖于WIN32提供的一组API和具体编译器的C运行时库函数。在启动一个线程之前,必须为线程编写一个全局的线程函数,一般来说,C++的类成员函数不能作为线程函数。这是因为在类中定义的成员函数,编译器会给其加上this指针。如果一定要以类成员函数作为线程函数,通常有如下解决方案:

(1)将该成员函数声明为static类型,去掉this指针;将成员函数声明为静态虽然可以解决作为线程函数的问题,但是它带来了新的问题,那就是static成员函数只能访问static成员。解决此问题的一种途径是可以在调用类静态成员函数(线程函数)时将this指针作为参数传入,并在改线程函数中用强制类型转换将this转换成指向该类的指针,通过该指针访问非静态成员。

(2)不定义类成员函数为线程函数,而将线程函数定义为类的友元函数。这样,线程函数也可以有类成员函数同等的权限;

(3)可以对非静态成员函数实现回调,并访问非静态成员。 线程之间通信的两个基本问题是互斥和同步。线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒。线程互斥是指对于共享的操作系统资源(指的是广义的"资源",而不是Windows的.res文件,譬如全局变量就是一种共享资源),在各线程访问时的排它性。当有若干个线程都要使用某一共享资源时,任何时刻最多只允许一个线程去使用,其它要使用该资源的线程必须等待,直到占用资源者释放该资源。 虽然WIN32提供的一组API函数在大多时候是可以解决多线程问题,但是由于工作程序中涉及的变量太多,函数之间的调用关系比较复杂,发现用WIN32提供的一组API函数实现起来难度会很大。

最新文章

  1. 比较牛X的互联网公司都有哪些作死的行为
  2. javascript数据结构与算法---队列
  3. Java 的静态代理 动态代理(JDK和cglib)
  4. Postgresql FATAL: could not create semaphores: No space left on device
  5. Java关键字——super
  6. Storm TimeCacheMap RotatingMap源码分析
  7. Codeforces Round #352 (Div. 2) D. Robin Hood 二分
  8. jquery easyui添加图标扩展
  9. Oracle表空间传输测试
  10. java双线程调用同一个对象+锁
  11. ES 集群调整、升级 最佳实践
  12. unable to fund vcvarsall.bat
  13. Mongodb 参数说明及常见错误处理
  14. Axure RP简单作品
  15. 提高Maven下载jar包的速度
  16. [Log函数]C++log函数使用
  17. Linux 学习 (五) 压缩与解压缩命令
  18. 学习 Spring Boot:(二十九)Spring Boot Junit 单元测试
  19. php学习目录
  20. 查看Window系列本地账户密码

热门文章

  1. 洛谷 P3225 [HNOI2012]矿场搭建
  2. linux 下SPI通信注意事项(待续)
  3. 全文检索引擎Solr系列——Solr核心概念、配置文件
  4. ORACLE GoldenGate在Windows与AIX平台ORACLE的单向、双向数据传输配置及其测试
  5. verilog 建模笔记--低级建模
  6. Python web框架 Tornado(二)异步非阻塞
  7. python's fourth day for me 列表
  8. Java中 单例(Singleton)的两种方式
  9. string的深入理解
  10. Minimum Sum of Array(map)