Thread

lounirp Messages postés 3 Date d'inscription jeudi 14 octobre 2004 Statut Membre Dernière intervention 20 octobre 2004 - 19 oct. 2004 à 16:36
lounirp Messages postés 3 Date d'inscription jeudi 14 octobre 2004 Statut Membre Dernière intervention 20 octobre 2004 - 20 oct. 2004 à 11:21
lounirp 8-)

A l'aide!!

J'ai un problème avec le lancement d'un thread
comment faire pour que je puisse lancer un thread sur une méthode getPNMData...

Vlà ce que j'ai codé mais bof bof sans succès...

LPTHREAD_START_ROUTINE ptrthread=getPNMData();
thread = CreateThread(NULL,0,ptrthread,NULL,0,&tid);

En fait ça me lance getPNMData() au lieu de la prendre comme pointeur pour le thread...

vlà l'erreur dans .NET après lancement:
Unhandled exception at 0x00000000 in PNMProject.exe: 0xC0000005: Access violation reading location 0x00000000.

4 réponses

cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
19 oct. 2004 à 17:51
salut,
j'ai peut etre pas trop compris ce que tu voulais faire, mais je crois que si tu remplaces ta ligne :
LPTHREAD_START_ROUTINE ptrthread=getPNMData();
par :
DWORD WINAPI ptrthread(LPVOID lpparameter)
{
getPNMData();
}
(à déclarer donc en global), ben déja ca ne va plus planter, et apres ca va lancer un thread qui execute ta fonction.
toi en faisant le cast, t'as pas tenu compte des conventions d'appel d'une fonction... d'ou le plantage.

a++ ;)
0
lounirp Messages postés 3 Date d'inscription jeudi 14 octobre 2004 Statut Membre Dernière intervention 20 octobre 2004
20 oct. 2004 à 08:36
lounirp 8-)

Hello,

Merci pour ton aide mais j'ai tjrs le même problème de conversion qui revient quand je mets ptrthread dans CreateFile:

0) ligne de code:
thread = CreateThread(NULL,0,ptrthread,NULL,0,&tid);

1) Erreur:
CPNM.cpp(64) : error C2664: 'CreateThread' : cannot convert parameter 3 from 'DWORD (LPVOID)' to 'LPTHREAD_START_ROUTINE'
None of the functions with this name in scope match the target type

2) info go to definition : (dans winbase.h)
typedef PTHREAD_START_ROUTINE LPTHREAD_START_ROUTINE;

3) info go to definition : (dans winbase.h)
typedef DWORD (WINAPI *PTHREAD_START_ROUTINE)(
LPVOID lpThreadParameter
);

4) inclusion en globale :
#include
#include <string.h>
#include <stdio.h>
#include <time.h>
#include "CToken.h"
#include "CCom.h"
#include "global.h"
#include "CConv.h"
#include <windows.h>
#include "stdafx.h"
#include <windowsx.h>

Pour expliquer un peu plus mon application : je récupère des données via port série en continue avec getPNMData() et pour ne pas bloquer mon programme, j'ai besoin de thread car il y a aussi une partie affichage à traiter en même temps.
0
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
20 oct. 2004 à 09:25
as tu bien mis le WINAPI ds la déclaration de ptrthread? (normalement tu l'as oublié !! :p)
c'est:
DWORD WINAPI ptrthread(LPVOID lpparameter)
{
getPNMData();
return 0; //je l'avais oublié lui :) c'est pr bien dire qu'on renvoit un DWORD.
}

et pas
DWORD ptrthread(LPVOID lpparameter)
{
getPNMData();
}

(le macro WINAPI est __cdecl, qui décrit donc la convention d'appel de la fonction qui sera appelé par le thread)
a+ ;)
0
lounirp Messages postés 3 Date d'inscription jeudi 14 octobre 2004 Statut Membre Dernière intervention 20 octobre 2004
20 oct. 2004 à 11:21
lounirp 8-)

Salut,

Merci pour ton aide, mais le véritable problème était que même si j'incluais windows.h, ".net" prenait par défaut une de ces librairies en utilisant son propre CreateThread qui lui-même utilisait d'autres paramètres.

alors vlà maintenant ça marche... enfin presque ... plus qu'à déboguer mon programme...

bye
0
Rejoignez-nous