Fonction qui s'autoexécute en C ou C++
NoNo
-
NoNo -
NoNo -
Salut,
Je programme en C sous windows mais je peux passer au C++ si cela s'averre nécessaire. Est-il possible de créer une fonction qui s'autoexécute lorsque le port parallèle change de valeur ou qu'un message est reçu dans une socket.
Pour l'instant je fais tourner mon programme en boucle mais mon PC sature, et je ne peux pas facilement lancer d'autres applications.
Merci,
NoNo
Je programme en C sous windows mais je peux passer au C++ si cela s'averre nécessaire. Est-il possible de créer une fonction qui s'autoexécute lorsque le port parallèle change de valeur ou qu'un message est reçu dans une socket.
Pour l'instant je fais tourner mon programme en boucle mais mon PC sature, et je ne peux pas facilement lancer d'autres applications.
Merci,
NoNo
A voir également:
- Fonction qui s'autoexécute en C ou C++
- Fonction si ou - Guide
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
- Fonction remplacer sur word - Guide
- Fonction somme excel - Guide
8 réponses
Le systheme de la boucle est une bonne idée, il faut juste te renseigner sur comment faire pour laisser la main a l'os un temps donné dans chaque tour de boucle.
Les threads et leur systheme de priorité pourraient je crois t'aider a résoudre ce probleme mais on peux faire sans.
Les threads et leur systheme de priorité pourraient je crois t'aider a résoudre ce probleme mais on peux faire sans.
bon je ne suis pas un pro en C/C++ encore moins en prog win, mais j'ai une idée : voila, il doit bien y avoir une fct ds les sockets quelque chose qui te permette d'etre a l'ecoute des ports(je pense q c'est ce q utilise les firewalls), la tu fais une fct qui renvoie un boolleen et qui ecoute un port(true ==quelque chose, false ==rien).Et cette fct tu devrais pouvoir le faire ds un thread et l'executer comme une sorte de processus et la, t'imobilises pas win, a moins q le processus soit trop quemandeur en memoire.Ensuite un autre processus et qui est a l'ecoute de l'autre thread( si cela est possible) et a chaq fois qu'il renvoie un true, t'executes ta fct que tu v executer.
j'ai pense au systeme des temporisateurs, mais pas bien, des données pourraient te passer a l'oeil sans q tu les vois.
tafiscobar
j'ai pense au systeme des temporisateurs, mais pas bien, des données pourraient te passer a l'oeil sans q tu les vois.
tafiscobar
Merci, si j'ai bien compris je n'ai pas pris une voie si idiote que ça pour l'instant, mais maintenant, il faut que j'ajoute un "thread". Bon bah je n'ai plus qu'à potasser.
Est-ce que vous connaissez un bon tutorial ou une aide sur les threads ?
Merci,
NoNo
Est-ce que vous connaissez un bon tutorial ou une aide sur les threads ?
Merci,
NoNo
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Il y a deux approches, avec ou sans thread, les deux marchent tres bien si elles sont correctement programmées.
Dans ta boucle tu rend la main a l'os pour qu'il s'occupe de l'affichage et de tout ce qui ne concerne pas ton programme et c gagné.
Il me semble que DoEvents existe dans l'api et puis
sous windows on a la notion d'evenements, si tu utilise un composant activeX pour les sockets, il lance automatiquement une fonction a chaque reception de donnée..bon, je suppose que tu ne dois pas utiliser de composant.
Dans ta boucle tu rend la main a l'os pour qu'il s'occupe de l'affichage et de tout ce qui ne concerne pas ton programme et c gagné.
Il me semble que DoEvents existe dans l'api et puis
sous windows on a la notion d'evenements, si tu utilise un composant activeX pour les sockets, il lance automatiquement une fonction a chaque reception de donnée..bon, je suppose que tu ne dois pas utiliser de composant.
Pour les sockets il existe sous windows un mecanisme ce sont mes sockets event.
Tu initialise ton event avec :
m_hEventObject = WSACreateEvent();
puis :
iResult = WSAEventSelect(recvSocket, m_hEventObject, FD_READ);
puis ds une thread tu fais :
DWORD dw = WSAWaitForMultipleEvents(MAXSOCK,pSock->m_hEventObject,FALSE,WSA_INFINITE, ! ALERTABLE);
il te faudra pour cela utiliser winsock2
WSAEventSelect(
Tu mets ds une thread un
Tu initialise ton event avec :
m_hEventObject = WSACreateEvent();
puis :
iResult = WSAEventSelect(recvSocket, m_hEventObject, FD_READ);
puis ds une thread tu fais :
DWORD dw = WSAWaitForMultipleEvents(MAXSOCK,pSock->m_hEventObject,FALSE,WSA_INFINITE, ! ALERTABLE);
il te faudra pour cela utiliser winsock2
WSAEventSelect(
Tu mets ds une thread un
un tread est un bout de programme qui tourne tous seul.
Pour ce fiare il existe la fonction afxbeginthread(nom du thread) qui permet de lancer ta fonction. Puis pour l'arreter tu utilises la fonction endthread(nom de ta fonction).
Maintenant pour définir que une fonction thread tu dois définier ta fonction comme thred c'st à dire tu dois mettre devant ta fonction thread exemple (0 étant la priorité de ton thread)
UINT thread(LPVOID v)
AfxBeginThread(thread,0);
AfxEndThread(0);
Pour ce fiare il existe la fonction afxbeginthread(nom du thread) qui permet de lancer ta fonction. Puis pour l'arreter tu utilises la fonction endthread(nom de ta fonction).
Maintenant pour définir que une fonction thread tu dois définier ta fonction comme thred c'st à dire tu dois mettre devant ta fonction thread exemple (0 étant la priorité de ton thread)
UINT thread(LPVOID v)
AfxBeginThread(thread,0);
AfxEndThread(0);