全球FlexSim系统仿真中文论坛

搜索
查看: 7243|回复: 6
打印 上一主题 下一主题

Mergesort上产品类型与端口数目不相等的问题

[复制链接]
跳转到指定楼层
1#
ws-lk 发表于 2010-6-12 16:50:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在source里面设了三种产品,mergesort的output有两个端口,我想端口1输送一种产品,端口2输送两种产品,代码如下:1 o1 T* o* l7 U5 T
{
3 p! v$ \1 c8 ?; I0 u$ Hcase 1: return getitemtype(item) == 1; break;
6 Q7 m& H1 E6 L2 f, D* h/ {case 2: return getitemtype(item) == 2||3;break;+ q' }& B" p, ~& m
}$ ?. c% L) p" v( J+ v4 A
结果成功了。但是,
0 \& t7 @9 E  a6 o' }9 [5 [5 D% a如果我将端口1设为输送两种产品,端口2设为输送一种产品,代码:" s" h8 j+ E! c: _$ ]7 \, Q
switch(port)
& O8 e' \6 ~1 {6 n{8 w( d+ M& }6 G  s  [
case 1: return getitemtype(item) == 1||2; break;
* A/ {+ Q. q1 I# o. p9 t# Jcase 2: return getitemtype(item) == 3;break;
8 z" U! |0 ]: [8 D' o2 g1 v6 x}
$ M3 U4 f! Q' ~5 G产生的结果为:端口1上出现3种产品,端口2没有产品。这是怎么回事呢?1 n& W; H- Z6 a# \
有谁有关于Megesort的详细介绍吗?
2#
wj109260758 发表于 2010-6-14 01:17:42 | 只看该作者
很奇怪,我也发现了
3#
wj109260758 发表于 2010-6-14 01:31:00 | 只看该作者
convery 却可以
4#
wj109260758 发表于 2010-6-14 04:42:12 | 只看该作者
写成case 1: return getitemtype(item) == 1||getitemtype(item)==  2;
  h8 r1 K- h6 e. ]  Vcase 2: return getitemtype(item) == 3;) T$ h0 S: d/ ?9 A) C+ |

  P, P1 W5 F$ N, e4 t就可以实现
5#
wj109260758 发表于 2010-6-14 05:15:56 | 只看该作者
case 2: return getitemtype(item) == 2||3;) ?  i% L" s  S
等于 case 2: return 2||3;
9 q6 ]6 U9 h6 |$ V等于: return 1;) o: x4 w2 n4 z% v6 ?
你的第一个程序相当于:
( X4 k* L5 K: acase 1: return getitemtype(item) == 1;   v$ U- K' f3 B; [0 t# Z3 X$ Q4 ~! v
case 2: return 1;在Megesort中最后一个出口,可用来将在所有其他临时实体从最后一个输出端口发送出去。所以,可以实现功能!& R( C& N, e. ?9 E/ K4 ~0 m
+ U7 r7 I. j8 J5 {" L
所以第二个你的程序可以解读为:
& J3 O; {& O! v# O5 n" y' Iswitch(port)
  P; A0 U. ]2 U" }8 B{
  l3 I  Y! B  ]3 I7 W- ecase 1: return 1;(相当于所有实体可以从出口1流出). Y& b8 B; h7 }, d
case 2: return getitemtype(item) == 3;(ITEM3从出口也可流出)
: ~: w# l8 s7 `  |7 v) ]}0 R6 t  |/ L0 }7 ?2 T1 o
由于第一个出口优先于出口2,所以ITEM3 一直从出口1流出。
0 L0 f7 R! T$ E7 `' Z5 h% O0 ~- g. ~; P3 R' d  k
如有错误,请指教。
6#
domcylai 发表于 2012-2-6 16:14:14 | 只看该作者
case 2: return getitemtype(item) == 2||3;; y, x0 y% `5 R6 ~8 N; o
等于 case 2: return 2||3;: [$ c6 o4 D3 d7 y# h0 ]
等于: return 1;: B; N2 Y) A% h  R6 i
你的第一个程序相当于:
% s' N* z0 z- ]3 Ucase 1: return getitemtype(item) == 1;
9 u& X7 X! m. g! ^case 2: return 1;在Megesort中最后一个出口,可 ...' a! E3 d) g, P* `
wj109260758 发表于 2010-6-14 05:15

- ]" k! i1 N5 t9 }; X6 O: r
# s9 R. @4 H9 }; N( i9 w% q理解有些问题啊,这个触发是一个判断,当每个item到达一个port(端口)时触发一次,然后判断触发:如果为真则发送,如果为假则不发送。/ s/ |6 y$ n, @
return getitemtype(item) == 2||3   相当于判断两次,只要一次为真则整体为真,判断的条件是:getitemtype(item) == 2 和 3 ,  3总为真# E9 K# i8 v( Y: I
0 k& ]% I) \& @, N  k0 k3 y1 Y. \7 U4 V
这种写法是不正确的,而return getitemtype(item) == 2||getitemtype(item) == 3  则判断两次,所以要注意这种细节。
7#
vivion 发表于 2012-3-30 11:19:05 | 只看该作者
感觉还是没有看懂到底为什么会出现这种情况?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|全球FlexSim系统仿真中文论坛 ( 京ICP备14043114号-2 )

GMT+8, 2025-10-18 13:19 , Processed in 0.063523 second(s), 13 queries .

Powered by Discuz! X3.3© 2001-2013 Comsenz Inc.

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