全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
ws-lk 发表于 2010-6-12 16:50:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在source里面设了三种产品,mergesort的output有两个端口,我想端口1输送一种产品,端口2输送两种产品,代码如下:
1 W6 _3 J- Z9 S: y{
" r! I4 a: Z' B! g7 zcase 1: return getitemtype(item) == 1; break;
# h9 b. o& Q; C: k6 ccase 2: return getitemtype(item) == 2||3;break;
! g& B: i3 s1 ~}; B+ v. v5 O. m) l  P
结果成功了。但是,- o. P( _/ a5 j. {  t
如果我将端口1设为输送两种产品,端口2设为输送一种产品,代码:& z8 D7 ]3 ?- ~8 ^, k% f' n
switch(port)
) w# }* E0 G/ k- D5 M. j1 ^9 V{
' ^/ G- o5 [4 z/ l5 Z4 h; j6 I% X* ~case 1: return getitemtype(item) == 1||2; break;
# _+ M8 r$ l) [( c+ ]. \" Hcase 2: return getitemtype(item) == 3;break;
* m0 [) |% d* _2 i" {}
/ E* H/ N9 n" V% i' v产生的结果为:端口1上出现3种产品,端口2没有产品。这是怎么回事呢?
6 i0 q( J& g5 R; N- D7 Y有谁有关于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;
1 @$ k1 ~" H# Z; L. }case 2: return getitemtype(item) == 3;
5 ]* Z, G+ ?- o% m  p
/ Y' O* M" b  U1 J! m就可以实现
5#
wj109260758 发表于 2010-6-14 05:15:56 | 只看该作者
case 2: return getitemtype(item) == 2||3;
2 H( q: O$ b: E: q* z6 X等于 case 2: return 2||3;, d' o& e- O9 P. z7 M. h
等于: return 1;
" X$ ?- U- C! B0 _' v你的第一个程序相当于:
- O5 \6 N: g0 r/ S% ycase 1: return getitemtype(item) == 1;
2 r+ Y- s' B  F$ r* h8 _6 }case 2: return 1;在Megesort中最后一个出口,可用来将在所有其他临时实体从最后一个输出端口发送出去。所以,可以实现功能!1 L$ d# b; N2 c- H

, e, N  P4 i. u! Q7 U所以第二个你的程序可以解读为:  f4 w+ w% n' X1 X
switch(port), G; V8 {; C. q' z
{: s1 \, B7 H* ?. ?" l
case 1: return 1;(相当于所有实体可以从出口1流出)  L7 W9 J( n1 K' L
case 2: return getitemtype(item) == 3;(ITEM3从出口也可流出)
; }0 \0 F( Y4 u/ ]}- G2 W7 W' H. c0 W6 G. R: Z
由于第一个出口优先于出口2,所以ITEM3 一直从出口1流出。0 w. V- x/ U; k% T4 h  ?4 t$ R$ P

) Z$ D; N; z% B5 O% L如有错误,请指教。
6#
domcylai 发表于 2012-2-6 16:14:14 | 只看该作者
case 2: return getitemtype(item) == 2||3;
. t! H6 ]6 W% H' l$ t9 X/ W等于 case 2: return 2||3;1 y  j0 _$ x) U; I# g; k
等于: return 1;% ]# F% s1 H  _8 B
你的第一个程序相当于:
# I. x# O7 X# [1 @case 1: return getitemtype(item) == 1; " v( I  O/ }$ n/ B
case 2: return 1;在Megesort中最后一个出口,可 ...) g* P8 T$ t' |- v8 O% O5 M2 @" q
wj109260758 发表于 2010-6-14 05:15
: Z) o8 g3 ]2 p8 t
' T# F0 ~0 V' |8 [
理解有些问题啊,这个触发是一个判断,当每个item到达一个port(端口)时触发一次,然后判断触发:如果为真则发送,如果为假则不发送。" h: r: K7 ~; S3 o2 E; d
return getitemtype(item) == 2||3   相当于判断两次,只要一次为真则整体为真,判断的条件是:getitemtype(item) == 2 和 3 ,  3总为真/ I0 b0 j" f* z, t

+ y) \3 A, Q8 Z* Q3 c+ S- c* M这种写法是不正确的,而return getitemtype(item) == 2||getitemtype(item) == 3  则判断两次,所以要注意这种细节。
7#
vivion 发表于 2012-3-30 11:19:05 | 只看该作者
感觉还是没有看懂到底为什么会出现这种情况?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-8-31 14:20 , Processed in 0.062911 second(s), 13 queries .

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

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