社区
进程/线程/DLL
帖子详情
一个关于线程数据的问题
fendou709
2007-12-10 10:28:38
为了计算一个数组的行数在一个线程中单独进行计算,将VIEw类指针作为参数传了进去,目的是将计算结果赋给View类的一个成员函数,在线程中可以得到正确结果,但是在外面获取时总是为0,不知道为什么啊?请高手指教!
...全文
123
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多
线程
演示
每个
线程
都有
一个
Apartment State,对于UI
线程
,它是STA(Single Threaded Apartment),非UI
线程
通常是MTA(Multi Threaded Apartment)。使用Dispatcher.Invoke 或 BeginInvoke 方法可以确保在正确的
线程
上执行UI...
POSIX多
线程
程序设计.pdf
然后讨论了一些高级话题,包括属性对象、
线程
私有
数据
和实时调度。此外,本书还讨论了调度的
问题
,并给出了避免错误和提高性能等
问题
的有价值的建议。本书使用了大量注释过后 实例来解释实际的概念,并包括Pthreads...
libevent多
线程
8. **流程图**:链接中的博客文章(http://blog.csdn.net/i_am_jojo/article/details/7587838)提供了
一个
关于多
线程
Libevent应用的流程图,可以辅助理解多
线程
在Libevent中的工作原理和步骤。 9. **Client与Server...
Android多
线程
文件夹下载及断点续传
多
线程
下载是将
一个
大文件分成多个部分,每个部分在
一个
单独的
线程
中下载。这样可以同时利用多个网络连接,提高下载速度。在`downloadDemo`项目中,可能包含以下关键点: 1. **任务分片**:根据文件大小,计算出每...
Android多
线程
断点续传下载+在线播放音乐
多
线程
下载是指通过多个网络连接同时下载
一个
大文件,每个连接负责文件的一部分,这样可以显著提高下载速度。断点续传则是当下载中断后,可以从已下载的部分继续下载,而不是重新开始,避免了网络不稳定或电量不足等...
进程/线程/DLL
15,473
社区成员
49,171
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章