_默默_ 发表于 2019-9-17 11:05

关于《Windows核心编程》书中概念的问题

本帖最后由 _默默_ 于 2019-9-17 16:14 编辑

书中有多处强调:如果写的是C/C++代码,就要去调用C++运行库的函数,不要调用Windows函数。
例如:如果写的是C/C++代码,就绝对不要调用CreateThread,相反,正确的选择是使用MicrosoftC++运行库函数_beginthreadex。

问题是:什么叫C/C++代码?我们写windows程序不都是通过C/C++代码调用windows函数的么?

pikachu888 发表于 2019-9-17 11:25

本帖最后由 pikachu888 于 2019-9-17 11:47 编辑

由于历史原因,C/C++运行库不是为多线程应用程序而设计的,所以为了保证其中的某些变量和函数的安全,C/C++程序不应该对Windows系统的类型有任何的依赖,因此不能用CreateThread


那么必须创建一个数据结构,_beginthreadex会返回新建线程的句柄,并使之与使用了C/C++运行库函数的每个线程所关联。


当在调用C/C++运行库函数时,那些函数必须读取主调自己的线程的数据块,从而避免影响其他线程

小可爱~ 发表于 2019-9-17 13:40

善用百度功能
秒杀多线程第二篇 多线程第一次亲密接触 CreateThread与_beginthreadex本质区别
话说c11和c++11都增加了线程标准库了, 所以现在基本上没用人用其他方法了吧???
C语言线程标准库
c++线程标准库

Overcoder 发表于 2019-9-17 13:53

调用VC的库,可以只要装VC就行。
否则写的软件还要限定操作系统版本?

jamesmeng 发表于 2019-9-17 14:27

楼主把C/C++与操作系统API搞混了。操作系统API与使用什么语言调用无关。

_默默_ 发表于 2019-9-17 16:14

pikachu888 发表于 2019-9-17 11:25
由于历史原因,C/C++运行库不是为多线程应用程序而设计的,所以为了保证其中的某些变量和函数的安全,C/C++ ...

谢谢大佬{:1_893:}

_默默_ 发表于 2019-9-17 16:16

小可爱~ 发表于 2019-9-17 13:40
善用百度功能
秒杀多线程第二篇 多线程第一次亲密接触 CreateThread与_beginthreadex本质区别
话说c11和c ...

谢谢大佬{:1_893:}
页: [1]
查看完整版本: 关于《Windows核心编程》书中概念的问题