多线程之间怎么数组共享

baody8 2018-12-03 10:12:16
线程1: 定一个简单数组 A[0]:= 'TEST';
线程2和线程3怎么读取呢?
...全文
372 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
doloopcn 2018-12-05
  • 打赏
  • 举报
回复
楼主:这是PASCAL的作用域概念错误

要让Unit2,Unit3使用同一个数组,在DELPHI中你应该将数组放在一个新Unit4中,供Thread2,3调用:
Unit2
.......

implementation
...

uses Unit4;
......
####################
Unit3
.......

implementation
...

uses Unit4;
......
#####################
Unit4
.......

var
a:array [0..6] of Integer;
implementation
......


无论你在哪一个Unit声明一个变量或常量,它的默认作用域都只能相关的域中有效,一般情况下都在implementation的上一行声明当前Unit的全局变量。
如果一个Unit被另一Unit引用,则被引用的Unit的全局变量或常量就可以在引用的Unit中直接使用
  • 打赏
  • 举报
回复
1. 你的Mytestthread没有建立实例
2. 要把GlobalArr的声明放在Testthread1的public部分
3. 要像全局变量那样使用可以把GlobalArr声明为class var
BlueStorm 2018-12-05
  • 打赏
  • 举报
回复
1.数组定义为全局变量 2.数组的读写放在临界区(CriticalSection)中,同一时间内仅允许一个线程读写数组。
  • 打赏
  • 举报
回复
引用 5 楼 baody8 的回复:
[quote=引用 2 楼 堕落恶魔_Delphi 的回复:] .....如果只是读取的话 数组定义成全局变量就行了
我描述可能不清楚,截图已补充说明了.麻烦看下谢谢.[/quote] 你引用多了, 全局变量和类无关, 所以你直接用GlobalArr[0]就行, 或者Unit2.GlobalArr[0]
baody8 2018-12-04
  • 打赏
  • 举报
回复
引用 1 楼 whb00120012 的回复:
在DELPHI 的IDE环境中,可让a[0]与一个组件关联,
线程2和线程3读取组件的值即可。

SET_PAMA( A[0]:STRING)

SET_para(label1.text);


我描述可能不清楚,截图已补充说明了.麻烦看下谢谢.
baody8 2018-12-04
  • 打赏
  • 举报
回复
引用 2 楼 堕落恶魔_Delphi 的回复:
.....如果只是读取的话 数组定义成全局变量就行了

我描述可能不清楚,截图已补充说明了.麻烦看下谢谢.
baody8 2018-12-04
  • 打赏
  • 举报
回复
线程1: 设置全局数组并赋值



线程2:引用线程1数组没办法取值

  • 打赏
  • 举报
回复
.....如果只是读取的话 数组定义成全局变量就行了
whb00120012 2018-12-04
  • 打赏
  • 举报
回复
在DELPHI 的IDE环境中,可让a[0]与一个组件关联,
线程2和线程3读取组件的值即可。

SET_PAMA( A[0]:STRING)

SET_para(label1.text);
lyhoo163 2018-12-04
  • 打赏
  • 举报
回复
多线程之间怎么数组共享,可以通过全局变量,实现茶座。但不宜对VCL操作。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧