线程中调用控件,非法出错,why? UP!这儿提问真是火爆,不up不行啊。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 myCtl创建成功了吗?加个判断:if(MyCtl.m_hWnd!=NULL)AfxBeginThread(GetFluxThreadProc,&MyCtl); 只要控件创建成功,应改是没有问题,我用vc得标准控件做过,很正常:)还有,你的线程GetFluxThreadProc是什么啊?函数名不是ThreadProc么? 好象可视控件大都不是Free Threading Model的, 一般都是Apartment的, Apartment的意思就是一个线程里可以使用多个Control, 但是一个Control只能在同一线程中使用.to: liugyUP 就是把文章更新后置'顶'的意思 to 楼上是笔误,应该是ThreadPro。to 光哥MyCtl创建成功了,在CMainFrame的成员函数里,直接调用MyCtl.Fuction()是可以的,完全正常,只是线程中不行。ps. up就是把帖子抬一抬,才发了几分钟就给淹到第二页去了,那谁还来看。 刚才给控件里添加了一个void成员函数,不加任何代码。线程可以正常调用。 可能是similar99说得那样,我看了一下msdn的文档TN064,BOOL AFXAPI AfxOleRegisterControlClass( HINSTANCE hInstance, REFCLSID clsid, LPCTSTR pszProgID, UINT idTypeName, UINT idBitmap, int nRegFlags, DWORD dwMiscStatus, REFGUID tlid, WORD wVerMajor, WORD wVerMinor );的nRegFlags,可以指定为afxRegApartmentThreading,这样一个控件的实例的所有调用只能在一个线程里。注册的时候我是用右键打开regsvr32.exe的方法,难道已经被指定为apartment的吗,是否在代码里重新注册,而不使之为apartment呢?请大家赐教,谢谢~~~ 好想Control的Threading model不是regsvr32.exe决定的吧...是在control原码里就写死了的. 象ATL里一个Control继承CComObjectRootEx时,使用CComMultiThreadModel做template的parameter就是Free, 使用CComSingleThreadModel做template的parameter就是Apartment了. 好想Control的Threading model不是regsvr32.exe决定的吧...是在control原码里就写死了的. 象ATL里一个Control继承CComObjectRootEx时,使用CComMultiThreadModel做template的parameter就是Free, 使用CComSingleThreadModel做template的parameter就是Apartment了. 如何把二进制数组数据批量的保存到数据库,采用ADO方式 程序是用中文VS做的 类似PPStream哪个频道列表的界面如何做? 大哥们:这种情况下内存释放为什么会出错?? Debug 和 Release版的不同 关于内存free的问题 如何设置CListView中行的高度? 谁能帮帮忙,给我一个切分窗口的代码例子 Microsoft Web 浏览器 是FLAT的, 怎么才可以有3d效果.[50分] 关于资源管理器类型如何写程序 写个导出Class的DLL!!!!!!!!!! 怎么样制作“图标程序”,就是在windows右下脚程序栏中的程序
加个判断:if(MyCtl.m_hWnd!=NULL)
AfxBeginThread(GetFluxThreadProc,&MyCtl);
一般都是Apartment的,
Apartment的意思就是一个线程里可以使用多个Control, 但是一个Control只能在同一线程中使用.to: liugy
UP 就是把文章更新后置'顶'的意思
是笔误,应该是ThreadPro。
to 光哥
MyCtl创建成功了,在CMainFrame的成员函数里,直接调用MyCtl.Fuction()是可以的,完全正常,只是线程中不行。
ps. up就是把帖子抬一抬,才发了几分钟就给淹到第二页去了,那谁还来看。
BOOL AFXAPI AfxOleRegisterControlClass( HINSTANCE hInstance, REFCLSID clsid, LPCTSTR pszProgID, UINT idTypeName, UINT idBitmap, int nRegFlags, DWORD dwMiscStatus, REFGUID tlid, WORD wVerMajor, WORD wVerMinor );
的nRegFlags,可以指定为afxRegApartmentThreading,这样一个控件的实例的所有调用只能在一个线程里。
注册的时候我是用右键打开regsvr32.exe的方法,难道已经被指定为apartment的吗,是否在代码里重新注册,而不使之为apartment呢?
请大家赐教,谢谢~~~
是在control原码里就写死了的. 象ATL里一个Control继承CComObjectRootEx时,使用CComMultiThreadModel做template的parameter就是Free, 使用CComSingleThreadModel做template的parameter就是Apartment了.
是在control原码里就写死了的. 象ATL里一个Control继承CComObjectRootEx时,使用CComMultiThreadModel做template的parameter就是Free, 使用CComSingleThreadModel做template的parameter就是Apartment了.