Traitement en parallèle des évènements d'un programmes
Bonjour à tous!
Je voudrais savoir comment faire pour que mon programme puisse tourner de manière séparer? Je m'explique.
J'ai un programme en c sur mon seveur vocal (ordi équipé d'une carte de communication téléphonique sous redhatEL3) qui reçoit les appels téléphoniques. Mais après quelques tests j'ai remarqué que le programme qui tourne ne prend pas les appels en parallèle. Quand il reçoit un 1er appel il commence à le traiter mais si un 2nd appel arrive il met en attente le 1er appel. Ce qui ne m'arrange pas vraiment. Je voudrais que le 2nd appel tourne en parallèle avec le 1er et de façon indépendante.
Aussi dans le même élan comment faire à l'avenir pour que je puisse savoir qu'un programme peut faire les même traitements mais en parallèle et pas de façon dépendante (tel des processus père-fils)?
Merci d'avance pour toutes vous idées !!! :)
Je veux être plus concret
Bonjour à vous!
Je n'ai pas pu m'ensortir dans la documentation des liens que vous m'avez recommandé. Du coup pour avoir un vision beaucoup plus concrete je voudrais vous présentez un bout de code et vous demandez qu'est ce qu'il faut ajouter concretement à celà pour resoudre mon problème d'une façon ou d'une autre (donc avec du code).
voici l'extrait:
1)- Ici c'est la définition de la fonction de jouer un message (message d'accueil par exemple) du serveur vocal.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| int BChannel::myPlayMessage()
{
int ret;
CTA_EVENT nextevent;
if( vceOpenFile( ctahd, flist[fnum].nom, VCE_FILETYPE_VOX, VCE_PLAY_ONLY,
ADI_ENCODE_NMS_32, &vcehd) != SUCCESS)
return FAILURE;
if(DemoShouldReport( DEMO_REPORT_COMMENTS))
printf("\tmyPlayMessage: joue le message %2.2d du fichier %s.vox ...\n",
message, flist[fnum].nom);
if( vcePlayList(vcehd, &message, 1, NULL) != SUCCESS )
{
vceClose( vcehd );
return FAILURE;
}
ret = SUCCESS;
playing = TRUE;
while( playing )
{
ctaWaitEvent ( qid, &nextevent, CTA_WAIT_FOREVER );
processEvent ( &nextevent );
}
} |
2)- Ici c'est l'appel de la fonction "jouer un message"
Code:
1 2 3 4 5 6 7 8 9
| // Message d'accueil
fnum = 2;// Id du fichier message
message = 0;//position du message "accueil" ou PROMPT_WELCOME
if((ret = myPlayMessage()) != SUCCESS)
{
//printf("\tMyReceiveCall: echec de lecture du message accueil %d\n",message);
}
}
playing = TRUE; |
Voilà les bouts de code et si quelqu'un peut rajouter ce qu'il faut pour que cette fonction puisse être appeler plusieurs fois en même temps, se serait avec une joie explosive que je l'appliquerais!!
merci!
Psst! Actuellement il fait une erreur CTAERR_FUNCTION_ACTIVE qui signifie: La lecture ou l'enregistrement est déjà en activité sur le contexte.
Balises codes ajoutées