OVH Cloud OVH Cloud

Windev : Resolution de l'erreur PURE VIRTUAL FONCTION CALL sur INTEL HT (HyperThreading) et XP pro

2 réponses
Avatar
frederic
Pour remercier la communauté Windev qui m'a bien aidée par les threads
de ce forum, voici la résolution d'un bug qui m'a fait perdre beaucoup
de temps.

Mon projet, qui comporte plusieurs threads, plusieurs sockets et
plusieurs timersys, fonctionnait parfaitement sur le PC de
développement équippé d'un AMD,
mais pas en prod sur un PC doté d'un Intel HT.


L'erreur PURE VIRTUAL FONCTION CALL se produit de façon aléatoire sur
pentium doté de cette technologie.

Cette erreur peut se produire dans d'autres circonstances, sur AMD
notemment, mais il s'agit alors d'erreur de programmation.

Il est possible de vérifier si la cause de ce bug est bien l'HT en
exécutant son appli et en choisissant un seul CPU dans le menu
contextuel "Définir l'affinité..." du gestionnaire de tâches de
windows; dans ce cas l'erreur ne doit plus se manifester.


Pour corriger de façon persistante,utilisez la fonction
"SetProcessAffinityMask" de l'api windows (NT et sup uniquement- pas
Win9X), et en choisissant le processeur auquel sera affécté le
processus (l'application) via le paramètre d'appel.

Les valeurs permises dans le cas d'un seul CPU HT sont 1 et 2.

Exemple de code d'initialisation de projet pour Windev 8:

hInstance est un entier


RetourFonction est un entier
hInstance=API("KERNEL32","GetCurrentProcess")

dwProcessAffinityMask est un entier=1 // ICI: choix du CPU


RetourFonction=API("KERNEL32","SetProcessAffinityMask",hInstance,dwProcessAffinityMask)

SI RetourFonction=0 ALORS
Erreur(ErreurInfo())
//Traitement en cas d'erreur
SINON
//Traitement normal
FIN


Voilà! J'espère que ça aidera!

Frédéric Bourguère
Informaticien Indépendant.

2 réponses

Avatar
Romain PETIT
Fr?d?ric Bourgu?re avait écrit le 08/12/2004 :

L'erreur PURE VIRTUAL FONCTION CALL se produit de façon aléatoire sur
pentium doté de cette technologie.
Voilà! J'espère que ça aidera!



Bonjour,

pour ma part, je connaissais le problème de l'HyperThreading depuis
mars 2004 :
http://groups.google.com/groups?selm=mesnews.65057d43.b2f7b47c.644.2191%40Signature.fin&output=gplain

Il avait été résolu soit en désactivant l'HT dans le BIOS (pas
terrible), soit en réécrivant mon appli sans utiliser d'autre thread
que le principal...

Merci donc pour ta solution bien plus satisfaisante.
(bien qu'elle ne le soit pas totalement étant donné qu'on arrive à
faire tourner des applis non WD multi-threads...)
Je teste dans ça dès que j'ai un moment.

A+

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
titou44
Il se trouve que Romain PETIT a formulé :
Fr?d?ric Bourgu?re avait écrit le 08/12/2004 :

L'erreur PURE VIRTUAL FONCTION CALL se produit de façon aléatoire sur
pentium doté de cette technologie.
Voilà! J'espère que ça aidera!



Bonjour,

pour ma part, je connaissais le problème de l'HyperThreading depuis mars 2004
:
http://groups.google.com/groups?selm=mesnews.65057d43.b2f7b47c.644.2191%40Signature.fin&output=gplain

Il avait été résolu soit en désactivant l'HT dans le BIOS (pas terrible),
soit en réécrivant mon appli sans utiliser d'autre thread que le principal...

Merci donc pour ta solution bien plus satisfaisante.
(bien qu'elle ne le soit pas totalement étant donné qu'on arrive à faire
tourner des applis non WD multi-threads...)
Je teste dans ça dès que j'ai un moment.

A+



bonsoir

comme j'étais à l'origine de la question citée, je suis toujours à
l'affut des infos sur ce problème.
en effet, j'ai des clients qui achètent des P4 HT. et badaboum !!

questions à Frédéric :

le code fourni peut-il être utilisé avec toutes les versions de windows
?
si oui, il est utilisable dans l'initialisation de tous les projets ?
est-il modifiable en "si détection du HT, message d'erreur" ?

merci.
cordialement.

titou44 (marre du spam) @freesurf.fr

--
Ceci est une signature automatique de MesNews.
Site : http://mesnews.no-ip.com