社区
进程/线程/DLL
帖子详情
一个关于线程数据的问题
fendou709
2007-12-10 10:28:38
为了计算一个数组的行数在一个线程中单独进行计算,将VIEw类指针作为参数传了进去,目的是将计算结果赋给View类的一个成员函数,在线程中可以得到正确结果,但是在外面获取时总是为0,不知道为什么啊?请高手指教!
...全文
121
10
打赏
收藏
一个关于线程数据的问题
为了计算一个数组的行数在一个线程中单独进行计算,将VIEw类指针作为参数传了进去,目的是将计算结果赋给View类的一个成员函数,在线程中可以得到正确结果,但是在外面获取时总是为0,不知道为什么啊?请高手指教!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
bdzwj
2007-12-12
打赏
举报
回复
看代码应该是线程同步的问题
captain_x
2007-12-12
打赏
举报
回复
我已经说过了,就是这样的
fendou709
2007-12-12
打赏
举报
回复
呵呵谢谢大家的指教,请看以下我的部分代码:
...
//线程函数
UINT TranslateAllBufferToArray(LPVOID param)
{
CAhEditView *now_param = (CAhEditView*)param;
....
now_param->m_ToalRowNumFromBuff = dwTotal;//这里可以得到需要的数据
}
//类的成员函数,调用线程函数,取出计算的结果
void CAhEditView::OpenFileByName(LPCTSTR FileName)
{
.....
CAhEditView* cmyself;
cmyself = this;
//启动一个新线程执行数据分析
//这里出现了线程之间的同步问题,如何准确获得由线程得到的数据
AfxBeginThread(TranslateAllBufferToArray,cmyself);
//m_ToalRowNumFromBuff是CAhEditView的成员变量
TRACE("m_ToalRowNumFromBuff is :%d\n",m_ToalRowNumFromBuff);//这时得到的却是0,错误啊!
}
captain_x
2007-12-11
打赏
举报
回复
to:dronly
不要感觉,你自己可以做一下试验,如果成功了你再来说。
简单的可以用个对话框,然后再开个线程,把这个对话框类传过去,然后调用其函数。
这个我们做过试验,然后查资料,得出的就是上面的结论。
jameshooo
2007-12-11
打赏
举报
回复
大多数关于窗口的API都不是线程安全的,在多线程环境中,适宜使用SendMessage、PostMessage来跟窗口通信,尽量不要直接调用其它的窗口API。
captain_x
2007-12-11
打赏
举报
回复
呵呵,我说的是mfc,你拿vcl当例子有什么用?
你可以按照我说的实验一下看看。
dronly
2007-12-11
打赏
举报
回复
感觉这个跟线程安全应该没什么关系啊
1.注意你传进去的View类是否已经是一个存在的空间而不仅仅是一个指针,就是有没有new 出来
2.注意你的View 类有没初始化过
3.你的View 类销毁的时间
4.你传进去的是否实参数,行参的话传多少次都不会在运行后得到结果
5.还有就是要确定是你的线程先运行完还是你的外部获取返回值的程序运行完了,windows用的是抢占式多线程,主线程还是工作线程先运行完是不固定的.
dronly
2007-12-11
打赏
举报
回复
to captain_x:
这里说感觉是我不对
我曾经做个一个这样功能的DLL
接口涵数是int InitTreeView(TTreeView* tree) //就是初始话一个TreeView控件 当时用的是C++Builder
功能是通过接受到的TTreeView指针,然后读取数据库的某个表,按分类的构造TreeView的内容,同时返回TreeView的
节点总数判断涵数是否执行成功,>0是成功,=0是条件错误,<0是异常错误.
DLL接受到 TTreeView *tree 后自动的构造 TThread 类,并用Event 锁起来
Thread 类先构造 TADOQuery 类运行SQL语句访问数据库并读取数据.
然后开始构造 TTreeNode 结构的数据并放到TTreeView *tree 上,
基本上用的是TTreeView *tree 自己的add()涵数,
线程结束前启动Event
DLL返回后释放自己.
测试的 TForm1 一切正常.
VC 下我很少做这个,因为VC下写自动创建界面类的时候因为VC本身的界面管理零散,一般自己做了一个界面资源管理器,
实际上就是一个头指针是Global的指针树
补充一下,楼主的问题里面线程里面传给TView的值是否临时变量或线程类本身的变量,如果是的话生存期就只到线程结束之前
fendou709
2007-12-10
打赏
举报
回复
哦?进程间通信 ?感觉就是 很简单的一个使用啊,还这么麻烦 呵呵
captain_x
2007-12-10
打赏
举报
回复
mfc的view不是线程安全的,不能跨线程使用,原因是使用了tls存储数据
解决办法就是用进程间通信办法
WPF多
线程
演示
WPF多
线程
演示
POSIX多
线程
程序设计.pdf
内容简介 《POSIX多
线程
程序设计》深入描述了IEEE的开放系统接口标准——POSIX
线程
,通常称为Pthreads标准。本书首先解释了
线程
的基本概念,包括异步编程、
线程
的生命周期和同步机制;然后讨论了一些高级话题,包括属性对象、
线程
私有
数据
和实时调度。此外,本书还讨论了调度的
问题
,并给出了避免错误和提高性能等
问题
的有价值的建议。本书使用了大量注释过后 实例来解释实际的概念,并包括Pthreads的简单索引和对标准化的展望。 《POSIX多
线程
程序设计》适合有经验的C语言程序员阅读,也适合多
线程
人员参考。
libevent多
线程
libevent多
线程
, 参考mariotcp 参考http://blog.csdn.net/i_am_jojo/article/details/7587838流程图
Android多
线程
文件夹下载及断点续传
Android实现网络多
线程
下载,断点续传,压缩包内有两个项目: downloadDemo:多
线程
下载 MulThreadDownloader:断点续传(网上别人的项目)
Java.Concurrency.in.Practice.pdf
Java.Concurrency.in.Practice.pdf
进程/线程/DLL
15,473
社区成员
49,171
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章