社区
进程/线程/DLL
帖子详情
一个关于线程数据的问题
fendou709
2007-12-10 10:28:38
为了计算一个数组的行数在一个线程中单独进行计算,将VIEw类指针作为参数传了进去,目的是将计算结果赋给View类的一个成员函数,在线程中可以得到正确结果,但是在外面获取时总是为0,不知道为什么啊?请高手指教!
...全文
163
10
打赏
收藏
一个关于线程数据的问题
为了计算一个数组的行数在一个线程中单独进行计算,将VIEw类指针作为参数传了进去,目的是将计算结果赋给View类的一个成员函数,在线程中可以得到正确结果,但是在外面获取时总是为0,不知道为什么啊?请高手指教!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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存储数据
解决办法就是用进程间通信办法
解决在同
一个
线程
下
数据
源多次切换的回溯
问题
本文介绍了一种解决在同
一个
线程
下
数据
源多次切换的回溯
问题
的方法,通过使用栈来存储动态
数据
源的切换记录,确保了
数据
源切换的正确性和
线程
安全性。
java防止两个
线程
同时修改
一个
数据
_java 多
线程
访问同
一个
对象
数据
保护的
问题
...
本文介绍了
一个
简单的Java多
线程
示例,演示了当多个
线程
共享同一
数据
时可能出现的
问题
,并通过使用synchronized关键字来确保同一时刻只有
一个
线程
能够访问特定代码块,从而避免
数据
竞争条件。
多
线程
通信(
数据
发生错乱又或者由于java抢占式调度所带来的各个
线程
争抢同
一个
方法的
问题
)
本文通过
一个
厨师和服务员
线程
的例子,探讨了Java多
线程
通信中
数据
错乱及抢占式调度导致的
问题
。通过使用锁、判断条件和
线程
唤醒睡眠机制,详细解释了解决这些
问题
的方法,确保
线程
安全执行。
多个
线程
共同调用
一个
方法造成
数据
错乱的
问题
本文介绍了一种使用多
线程
从DataHub读取大量
数据
,并将其转换为文件的方法。针对多
线程
环境下出现的
数据
一致性
问题
,文章提出了通过同步锁解决的方法。
Java
线程
:
线程
的同步与锁 一、同步
问题
提出
线程
的同步是为了防止多个
线程
访问
一个
数据
对象时,对
数据
造成的破坏。 例如:两个
线程
ThreadA、ThreadB都操作同
一个
对象Foo对
本文深入探讨Java
线程
同步机制,解析同步
问题
产生的原因及解决方案,详细介绍锁的概念、同步方法和代码块的使用,以及如何避免
线程
间的死锁。
进程/线程/DLL
15,465
社区成员
49,169
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章