lvhaian 发表于 2009-12-11 10:42:55

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

简单点说就是在主窗体中和定时器两个线程中我都要用到一个变量, 怎么处理?

aleyn 发表于 2009-12-11 10:54:13

MAP -> 阻塞 -> 读取or设置 -> 解除阻塞

lvhaian 发表于 2009-12-11 11:06:58

【1楼】 aleyn 煮茶村长

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

watercat 发表于 2009-12-11 11:15:11

若是简单变量(32位系统中不足32位的变量,或64位系统中不足64位的变量),其实不必先行阻塞,因为那个最终是原子操作

lvhaian 发表于 2009-12-11 11:19:32

【3楼】 watercat

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

谢谢.

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

继续请教下.

watercat 发表于 2009-12-11 11:34:47

那确实需要阻塞机制

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

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

watercat 发表于 2009-12-11 11:36:08

话又说回来,我个人以为,其实C#并不是一个良好的上位机软件开发环境……

lvhaian 发表于 2009-12-11 11:53:00

谢谢 watercat ,我已经解决了问题.

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

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

watercat 发表于 2009-12-11 12:01:21

C# 对对象嵌套和同步的控制还是比较好的

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

lvhaian 发表于 2009-12-11 12:51:14

我对上位机编程属于初级阶段, 只用过 vb.

所以现在问题都是比较初级阶段的 ^_^
页: [1]
查看完整版本: 智能充电器上位机问题请教: C# 中夸线程调用变量怎么做? [已经解决]