OK. Codes are as follows:

function fade_normal(PARTICLE *p)
{
var mdl_dist,p_dist;
mdl_dist = vec_dist(emit_dst_pos.x, emit_src_pos.x);
p_dist = vec_dist(p.x, emit_src_pos.x);
if (p_dist > (mdl_dist-100)) //cut surplus length of beam
{
p.lifespan = 0;
}
}

function effect_normal(PARTICLE *p)
{
VECTOR particle_direction;
vec_set(particle_direction.x, emit_dst_pos.x);
vec_sub(particle_direction.x, emit_src_pos.x);

vec_normalize (particle_direction, random(100)); //250:velocity
vec_add(p.vel_x, particle_direction);
p.alpha = 60 + random(20);
p.bmap = barrier_tga;
vec_set(p.blue, vector(emit_color.x, emit_color.y, emit_color.z));
p.size = 3;
p.flags |= (TRANSLUCENT | BRIGHT | MOVE);
p.flags |= emit_flag;
p.event = fade_normal;
}

function emit_beam(var* dst, var* src,
var* color, var seconds, int src_type, int dst_type, int flag)
{

int start_sec = sys_seconds;
//ignore arguments with setting dst,src,color etc.

while(1)
{
effect(effect_normal, 50/(0.1 + time_step),
vector(emit_src_pos.x-6, emit_src_pos.y-20+random(41),emit_src_pos.z-30+random(11)), nullvector);

if(seconds > 0)
{
if((start_sec + seconds) % 60 == sys_seconds)
{
break;
}
}

wait(1);
}
}

function test_beam()
{
//ignore code setting dst, src, clr, etc.
emit_beam(dst, src, clr, 5, HK, PC, 0);
//Every time I call emit_beam(), only one beam exists.
}