因为CreateThread()没有对C Runtime库中的全局变量进行保护,所以应该调用_begingthreadex()才是安全的。然而我发现MFC源代码中CWinThread类调用的正是CreateThread(),那么它是不是缺乏安全性呢?
解决方案 »
- 创建失败,调试进去对话框句柄与tab句柄全是0怎么回事呀????
- 通过creat动态创建静态文本框 为什么不放松WM_CTLCOLOR消息(急疯了)
- 那位大哥大姐会用C++语言实现一个函数的傅立叶变换啊?毕业设计要用 啊////
- 当网络未连接时用windows API能否正常获取本机IP和MAC地址?
- 为什么我用LoadCursor(hinstance, MAKEINTRESOURCE(IDC_H_CROSS) )总失败
- 丢人啊,我不会写程序了,这样的问题??高手进来指点一下,最基本的
- 一个小问题
- 超级难题!!!!
- 谁知道PDF文件格式的详细解释
- 请问如果才能快速的别人的资源copy到自己的程序中??
- 请教一个有关ListCtrl的问题
- update语句错在哪?ADO,ACCESS
看你的程序使用在什么场合下了,如果要是标准的c++程序,我想还是用_beginthreadex吧,
当然是_beginthreadex调用Createthread了。
没有问题的,全局变量用好同步机制没有问题的!
MFC中CWinThread类明明用的_beginthreadex
_beginthreadex 比 CreateThread 安全,这句话紧紧在你在这个线程函数里调用了几个特殊的 CRunTime库的函数,那几个函数需要一个指针,这个指针是同线程的参数一同传给线程函数的, CreateThread 当然没有传这个指针, 而CreateThread在_beginthreadex里被调用了,而且改变了你的参数结构,在参数后面加入了一个结构
答案在在thrdcore.cpp文件中,CWinThread类亦定义了一个名为CreateThread的成员函数,它调用的正是_beginthreadex,所以CWinThread是安全的。而Win32 API的CreateThread(声明在winbase.h)应该是不安全的,因而如果用MFC工作的话应调用CWinThread的成员函数CreateThread,否则就应该调用CRunTime库的函数_beginthreadex。我心里一直就觉得不妥:CWinThread作为MFC中的主力怎么会是不安全的呢?
因为我以前用MFC写程序时都是调用AfxBeginThread启动一个worker线程,干完活儿就走人。前几天要用Win32 API写程序时查阅了一下《Windows核心编程》,才注意到了CreateThread和_beginthreadex的安全性问题,想到原来写的程序,于是去看AfxBeginThread源代码的定义,发现里面有CreateThread,也没仔细看就到这里来献丑,真是草率。衷心感谢各位的参与!