搜索
bottom↓
回复: 9

智能充电器上位机问题请教: C# 中夸线程调用变量怎么做? [已经解决]

[复制链接]

出0入0汤圆

发表于 2009-12-11 10:42:55 | 显示全部楼层 |阅读模式
简单点说就是在主窗体中和定时器两个线程中我都要用到一个变量, 怎么处理?

出0入4汤圆

发表于 2009-12-11 10:54:13 | 显示全部楼层
MAP -> 阻塞 -> 读取or设置 -> 解除阻塞

出0入0汤圆

 楼主| 发表于 2009-12-11 11:06:58 | 显示全部楼层
【1楼】 aleyn 煮茶村长

谢谢村长, 基本思路明白了, 基本就是和操作系统中处理临界状态的办法一样, 我去找找具体实现办法.

出0入0汤圆

发表于 2009-12-11 11:15:11 | 显示全部楼层
若是简单变量(32位系统中不足32位的变量,或64位系统中不足64位的变量),其实不必先行阻塞,因为那个最终是原子操作

出0入0汤圆

 楼主| 发表于 2009-12-11 11:19:32 | 显示全部楼层
【3楼】 watercat

明白了, 你说的原子操作, 意思是说是单指令周期的操作.

谢谢.

那么我知道我的问题所在了, 我的问题不是出在跨线程全局变量操作, 而是夸线程控件属性操作.

继续请教下.

出0入0汤圆

发表于 2009-12-11 11:34:47 | 显示全部楼层
那确实需要阻塞机制

http://msdn.microsoft.com/zh-cn/library/ms173179(VS.80).aspx

技术实现的方法说的应该很明白了,至于阻塞机制本身的工作原理和使用逻辑,那个是多线程本身的知识范畴,与C#无关……

出0入0汤圆

发表于 2009-12-11 11:36:08 | 显示全部楼层
话又说回来,我个人以为,其实C#并不是一个良好的上位机软件开发环境……

出0入0汤圆

 楼主| 发表于 2009-12-11 11:53:00 | 显示全部楼层
谢谢 watercat ,  我已经解决了问题.

我的问题出在使用了 系统时钟的定时器, 我现在自己定义了个定时器, 就把这个问题解决了.

我分析下来是这样的:
系统定时器线程和我的 form 线程同时调用同一个控件属性出问题了. 在我自己窗体中增加一个定时器是没有这个问题的.

出0入0汤圆

发表于 2009-12-11 12:01:21 | 显示全部楼层
C# 对对象嵌套和同步的控制还是比较好的

不过,这些经验记得不能带到 C# 以外的编程上去

出0入0汤圆

 楼主| 发表于 2009-12-11 12:51:14 | 显示全部楼层
我对上位机编程属于初级阶段, 只用过 vb.

所以现在问题都是比较初级阶段的 ^_^
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 22:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表