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

广东企业网站建设公司价格/外链链接平台

广东企业网站建设公司价格,外链链接平台,酒店加盟什么网站建设,网络营销策略论文AfxGetApp->GetMainWnd()与AfxGetMainWnd 前台线程与后台线程,AfxGetApp->GetMainWnd()与AfxGetMainWnd的不同 顾名思义,前台指看得见,既然看得见自然要有窗口,而后台是看不见,看不见可以理解为没有窗口,既然没…

AfxGetApp->GetMainWnd()与AfxGetMainWnd

前台线程与后台线程,AfxGetApp->GetMainWnd()与AfxGetMainWnd的不同  

  顾名思义,前台指看得见,既然看得见自然要有窗口,而后台是看不见,看不见可以理解为没有窗口,既然没有窗口,那么用AfxGetMainWnd()取得其窗口句柄,未免有些搞笑,为什么呢?聪明的你想必早已明白,如果你曾经跟踪过AfxGetMainWnd()的调用,会发现它取得的是AFX_MODULE_THREAD_STATE线程模块中保存的活动线程的窗口句柄,而后台线程既然没有窗口,那你又从何而言取得窗口句柄呢,(也许有人对后台的理解是不显示窗口,就算有窗口,只要不显示就是后台线程,严格的说不是这样,窗口主要用来与用户交互,有窗口就难免阻塞,而后台线程往往用来进行一些后面的运算或处理,是通过前台传递的信息或数据进行相应运做的,如果窗口隐藏谈何信息传递呢?况又不能像其它线程那样进行后台运做.不过你如此理解也无防 ,关键是明白有什么区别,及怎么用.)
AfxGetApp()->GetMainWnd()取得的是主窗口句柄,无论在那个线程里调用都是没有问题的,因为它先取得主线程句柄,再取得主线程的活动窗口(如视图切换可能导致的替代,这种情况我也不大清楚),如果没有活动窗口则取主窗口,任何程序总要有一个主窗口,所以它的调用不会出现问题,如果想取得程序的主窗口建议用AfxGetApp()->GetMainWnd().

  要注意的是控制台程序没有窗口,其窗口句柄始终为0.其次后台线程其实就是一个控制台式的程序,只不过不是主线程罢了.还有就是用API Createthread之类的函数创建的线程无法生成CWinThread对象.所以如果想使用CWinThread对象里的函数,以及一些全局函数进行操作,如上面的AfxGetMainWnd(),就必须用CWinThread对象的CreateThread函数,或用AfxBeginThread()函数创建线程,否则很可能出现错误,因为MFC对线程的管理是通过CWinThread对象来完成的,通过下面的跟踪代码你不难看出.  记得当初有一位前辈曾提到过这个问题,只是不知它是否理解这其中的原因

以下是跟踪代码:

_AFXWIN_INLINE CWnd* AFXAPI AfxGetMainWnd()
{ CWinThread* pThread = AfxGetThread();
        return pThread != NULL ? pThread->GetMainWnd() : NULL; }


CWinThread* AFXAPI AfxGetThread()
{
// check for current thread in module thread state
AFX_MODULE_THREAD_STATE* pState = AfxGetModuleThreadState();
CWinThread* pThread = pState->m_pCurrentWinThread;

// if no CWinThread for the module, then use the global app
if (pThread == NULL)
        pThread = AfxGetApp();

return pThread;
}

可以看出当取得的线程句柄为空时,则返回主线程句柄,所以在主线程里调用AfxGetMainWnd()是一定没问题的,(控制台程序除外)

_AFXWIN_INLINE CWinApp* AFXAPI AfxGetApp()
{ return afxCurrentWinApp; }


CWnd* CWinThread::GetMainWnd()
{
if (m_pActiveWnd != NULL)
        return m_pActiveWnd;          // probably in-place active

// when not inplace active, just return main window
if (m_pMainWnd != NULL)
        return m_pMainWnd;

return CWnd::GetActiveWindow();
}

那个afxCurrentWinApp就不用说了吧.

嘿嘿,一切完毕,如果你的程序存在类似上面的问题可一定要改回来噢

http://www.jmfq.cn/news/4857355.html

相关文章:

  • 论述网站建设流程/正规网站优化公司
  • 网站模板文件怎么下载/廊坊seo排名优化
  • 网站开发协议/广州今天刚刚发生的重大新闻
  • 专业做面膜的网站/seo课培训
  • wordpress跳转外链/西安优化排名推广
  • 苏州网站建设制作服务商/产品推广方法
  • 开源建站系统cms/谷歌代运营
  • 网站建设公司出路/怎么自己建立网站
  • chn域名网站/长春百度seo公司
  • 有口碑的武进网站建设/推广注册app拿佣金
  • 政务网站开发/搜索引擎优化的方法
  • 默认网站停止/页面seo是什么意思
  • 温州建设集团网站首页/企业网络组网设计
  • 网站群建设规划方案/特色产品推广方案
  • 企业网站制作开发/seo的实现方式
  • 事业单位网站建设方案/预防电信网络诈骗
  • 如何做餐饮的网站/百度竞价
  • html电影网页设计实例代码/浙江短视频seo优化网站
  • seo网站推广优化费用/乱码链接怎么用
  • 服装网站建设价格/营销渠道名词解释
  • 商城网站开发解决方案/蜜雪冰城网络营销案例分析
  • 一个企业做网站的目的/怎么做网站
  • 菠菜导航网站可以做/百度信息流怎么做效果好
  • wordpress 建站模板/优秀网站seo报价
  • wordpress城市插件/北京百度搜索排名优化
  • 网站后台登陆图片/深圳seo关键词优化
  • 怎样创建网站直播接口/搜一搜搜索
  • 个人网站怎么做口碑/西安百度关键词优化排名
  • 云南省住房和城乡建设厅官方网站/长春seo培训
  • 怎么用frontpage做网站/推广赚钱平台