首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

VC中子线程和主线程有什么区别,该怎么解决

2012-03-13 
VC中子线程和主线程有什么区别我在怀疑是不是大部分WIN API都没有办法在子线程中使用,虽然大部分时间线程

VC中子线程和主线程有什么区别
我在怀疑是不是大部分WIN API都没有办法在子线程中使用,虽然大部分时间线程的作用感觉都一样,但是一旦涉及一些操作的时候就发现不一样了,但是具体哪里不一样还买搞清楚,望高手指点

[解决办法]
在操作系统层面,子线程和主线程的唯一区别就是 主线程退出的时候调用的是ExitProcess,子线程调用的是ExitThread。如果你显示调用这俩函数中的一个,就没区别了。

在语言库层面,所有的全局变量的初始化工作和库的初始化是有主线程在进入main函数前完成的。
在main函数退出后销毁。有些函数子线程不能用就是因为这些函数依赖的线程相关的库没有初始化。

_beginthreadex会初始化C/C++库,afxbeginthread 会初始化MFC和C/C++库
API createthread啥都不初始化。

其他没区别。
[解决办法]
从windows的角度来说,进程的第一个线程叫主线程, 没别的区别,主线程返回则进程结束是运行库的入口例程干的,真正让主线程运行完不会exitprocess


你在其他线程调用peekmessage没用可能是你想用它接受主线程创建的窗口的消息,这是不行的
[解决办法]

探讨

最明显的一个区别就是PeekMessage这个函数无法在子线程调用,还有UpdateLayeredWindow也不正常,的确在不调用外部API的时候没感觉有什么不一样,但是一旦调用外部API(不一定是WIN API),即使用互斥也经常会出错

热点排行