begin process at 2012 05 30 13:43:44
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

System

 > 

Thread bloquant


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Thread bloquant

lundi 31 août 2009 à 11:43:43 | Thread bloquant

Rankin

Salut à tous,

Je suis en train de développer un petit programme qui utilise les tubes nommés. Ayant rencontré des soucis en voulant rendre les I/O non bloquantes, j'ai décidé d'exporter le code du serveur dans un thread.
Le problème, c'est que mon application est toujours bloquée sur le ConnectNamedPipe().

Je pourrais peut-être chercher de ce côté, mais comme j'ai déjà rencontré ce problème de thread bloquant sur un autre de mes programmes, j'aimerais autant savoir où est-ce que je commets une erreur.

Voici le code du thread :

DWORD thread()
{
HANDLE hPipe = CreateNamedPipe("\\\\.\\pipe\\monpipe", PIPE_ACCESS_DUPLEX, PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT, 1, 256, 256, 0, NULL);
if (hPipe != INVALID_HANDLE_VALUE)
{
bool recv;
char * buffer = new char [256];
DWORD bytesRead;
while (true)
{
if (ConnectNamedPipe(hPipe, NULL))
{
recv = ReadFile (hPipe, buffer, 256, &bytesRead, NULL);

buffer[bytesRead] = '\0';
printf("Reçu : %s\n",buffer);

if (!recv || bytesRead == 0)
break;

FlushFileBuffers(hPipe);
DisconnectNamedPipe(hPipe);
}
}
delete[] buffer;
CloseHandle(hPipe);
}
else
printf("Creation du pipe failed %ld",GetLastError());
}

et le main qui l'appelle :

int main()
{
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)thread(), 0, 0, 0);
while (true)
{
cout<<"Je suis dans la main boucle"<<endl;
Sleep(1000);
}
return 0;
}

Une fois le thread créé, le message du main ne s'affiche jamais... J'ai essayé de réduire la priorité du thread, mais même au minimum ça ne change rien (d'ailleurs le flag CREATE_SUSPENDED même sans resume ne sert à rien chez moi, le thread est quand même lancé...)

J'ai cherché des réponses un peu partout, mais j'ai l'impression que ce problème est très courant. Je ne peux quand même pas croire qu'il s'agisse uniquement d'une mauvaise gestion des threads sous Windows ?

lundi 31 août 2009 à 17:24:54 | Re : Thread bloquant

Chouchou182

Réponse acceptée !

Salut,

Les parenthèses de thread() dans l'appel de CreateThread me font une drôle d'impression; que se passe-t-il si tu les enlèves ?

Si le code du thread était du bon type, il n'y aurait pas besoin du cast:

DWORD WINAPI thread(LPVOID lpParam) {...} d'après ce que je peux trouver sur MSDN.

C'est aussi bizarre qu'il n'y ait pas de return dans le code d'une fonction sensée renvoyer un DWORD...

Bonne prog,
--
Chouchou.

lundi 31 août 2009 à 17:39:53 | Re : Thread bloquant

Rankin

Merci pour ta réponse, j'ai corrigé ce que tu m'as dit (suppression des parenthèses, suppression du cast, définition du thread en DWORD WINAPI thread(LPVOID lpParam) et un petit return à la fin du code.

Et ça marche. Le pire, c'est que j'ai commencé à travailler de cette façon à partir du MSDN, que j'avais des erreurs, et à force de refaire je me suis éloigné du modèle qui marche... le "thread" était exécuté comme une simple fonction.

Merci en tout cas pour tes éclaircissements !




Cette discussion est classée dans : buffer, thread, pipe, bytesread, hpipe


Répondre à ce message

Sujets en rapport avec ce message

thread ne répondant pas sous MFC [ par seito ] bonjours,je suis en train de concevoir une application qui me permet d'éffectuer un chat en réseau sous "Visual C++ 6.0" le problême c'est que quand j fermer une thread qui est en attente fgets() en c sous windXP [ par dyroj ] Bonjour a tous,je n'arrive pas fermer une thread qui est en attende avec la fonction fgets(),thread a quitter :DWORD WINAPI Tsend_ms_t(LPVOID lpvoid){ Threads, fonction et mutex ? [ par Adict ] bonjour à tout le monde [^^happy13] dans mon projet de créer un tchat il faut que j'applique sur le client un thread qui exécute une autre fonction q algorithme de z buffer [ par sousoi ] bonjour, j'ai besoin de realiser l'algorithme de z buffer. je connue que le z buffer a une matrice qui contiet le profondeur minimal ou la distance mi multi thread et vecteur d'objet [ par seb2583 ] Bonjour a tous, j'ai un probleme que je n'arrive pas a resoudre. Dans mon code C++, j'ai un vecteur (de type boost) d'objet (de classe A). Dans mon faire des Multi-threads ? [ par Adict ] Bonjours j'aurais besoin d'aide car je ne comprend pas vraiment comment faire des multi thread.. un ok mais plusieurs [^^mad5] pour faire un thread n SDL et les threads [ par Shirubaino ] Bonjour. Dans le cadre d'un jeux nécessitant la pause de plusieurs bombes en même temps (et ainsi leur explosion a un interval précis), et pour gére Client UDP [ par doufdouf51 ] J'ai un probleme avec la fonction recvfrom() J'ai une application une en C# et dll en C++ qui communique en UDP. Les deux programme peuvent envoyer de Problème avec le buffer atmega32 [ par kenshin87 ] Bonjour à tous et à toutes. Je travaille sur un atmega32 avec AVR studio4. Voila, j'aimerais stocker des données octet par octet dans le EEPROM. Pour enregistrement de buffer dans un fichier [ par ekto45 ] Bonjour Je bosse sur une interface CVI/labwindows ( langage C) et je dois récupérer grâce à des requêtes MODBUS que j'envoie sur mon port COM des don


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,978 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales