MFC中使用worker thread的问题

sdssly 2009-08-04 03:32:18
我的app使用MFC的doc/view架构,能否这样使用worker thread
在View的类中的函数中 AfxBeginThread(TestFunction, this);

TestFunction是一个全局函数,开启一个thread 通过传递的this指针来得到view类
UINT TestFunction(LPVOID pParam)
{
int iFindItem = 0;
stBPData bpdata;
BOOL bRet = FALSE;
SYSTEMTIME systime;
CString LineContent;

CDXXXView *pClass = (CEDoctorView *)pParam;


这样我就可以在thread中访问view类中的变量了 我总是感觉这样使用不很正常,不知道大家是怎么使用的??
...全文
74 点赞 收藏 12
写回复
12 条回复
gg606 2009年08月08日
[Quote=引用 10 楼 visualthinking 的回复:]
引用 9 楼 gg606 的回复:
最好是传窗口句柄而不是窗口指针,因为“你不能依赖于对象的持续存在。。。”(MSDN里有说明)



我觉得是可以依赖的,销毁窗口之前有足够的时间去做线程清理工作,传指针是可以的。
[/Quote]

关于MFC,我想还是微软更清楚一些。
回复 点赞
robertcarlos 2009年08月06日
reinterpret_cast
回复 点赞
sdssly 2009年08月05日
[Quote=引用 7 楼 alicehyxx 的回复:]
引用 6 楼 heksn 的回复:
需要注意的就是同步问题


Up,如果传入的线程的参数是不变的,可以用一个数据类封装需要的数据,然后new一个数据类的对象,把这个指针传入线程能安全点。
[/Quote]

我现在传入线程函数的就是当前View的一个指针,使用this来表示的 当前程序运行时 这个this指针应该永远有效并且是不便的吧? 你说的new 一个对象传入是什么意思??
回复 点赞
沙漠黑鸟 2009年08月05日
[Quote=引用 6 楼 heksn 的回复:]
需要注意的就是同步问题
[/Quote]

Up,如果传入的线程的参数是不变的,可以用一个数据类封装需要的数据,然后new一个数据类的对象,把这个指针传入线程能安全点。
回复 点赞
visualthinking 2009年08月05日
[Quote=引用 9 楼 gg606 的回复:]
最好是传窗口句柄而不是窗口指针,因为“你不能依赖于对象的持续存在。。。”(MSDN里有说明)


[/Quote]
我觉得是可以依赖的,销毁窗口之前有足够的时间去做线程清理工作,传指针是可以的。
回复 点赞
gg606 2009年08月05日
最好是传窗口句柄而不是窗口指针,因为“你不能依赖于对象的持续存在。。。”(MSDN里有说明)

回复 点赞
写不动代码的人 2009年08月04日
需要注意的就是同步问题
回复 点赞
togoblime 2009年08月04日
如果还有其它线程使用CDXXXView,还要注意线程的同步
回复 点赞
togoblime 2009年08月04日
放心吧,这样使用没有问题,因为所有的线程共享进程的地址空间。但要注意两个问题
1.保证CDXXXView销毁后TestFunction不再访问它
2.谨慎使用AfxGetMainWnd,FromHandle等函数,它可能会返回临时对象
回复 点赞
visualthinking 2009年08月04日
对m_XXX成员的访问,pClass->m_XXX
回复 点赞
sdssly 2009年08月04日
我的类的名称就是CDXXXView 程序中是否应该这样使用?
UINT TestFunction(LPVOID pParam)
{
int iFindItem = 0;
stBPData bpdata;
BOOL bRet = FALSE;
SYSTEMTIME systime;
CString LineContent;
CDXXXView *pClass = (CDXXXView *)pParam;

我担心的是这样使用thread 是否OK ?? 其他人怎么使用thread访问其他数据的
回复 点赞
visualthinking 2009年08月04日
将CDXXXView *pClass = (CEDoctorView *)pParam;
改为CDXXXView *pClass = (CDXXXView *)pParam;
而且,CEDoctorView 的声明 中应该包含一个CDXXXView类型的成员m_DXXXView
回复 点赞
发动态
发帖子
进程/线程/DLL
创建于2007-09-28

6376

社区成员

4.9w+

社区内容

VC/MFC 进程/线程/DLL
社区公告
暂无公告