2010-08-08 30 views
4

Je suis vraiment perplexe.application Delphi multithread construit en Vista et ne fonctionnera pas en XP

Je cours delphi 2007 sur Vista. J'ai construit beaucoup d'applications et les ai exécutées dans XP sans problème. Cette dernière application a dû utiliser des threads. Je suis sûr que mon code est correct. Il tourne bien sur Vista, mais quand je l'exécute sur XP (essayé plusieurs PC) mon programme semble lag (OS 32 bits, XP SP3 et Vista SP1, dotnet v2). Le meilleur exemple étant si je débranche le port série mes coms continueront à fonctionner etc.

J'installais Delphi sur mon ordinateur de xp, et ai couru mon programme pendant que delphi courait. Comme je l'ai couru à partir de l'exe construit à Vista. Ça s'est bien passé alors. Fermer delphi, et le comportement commence à être à nouveau retardé.

Si je débranche et rebranche un lecteur flash, les coms se rattrapent à nouveau.

Je veux construire l'application sur ma machine basée sur xp, mais j'ai comme un million de composants tiers qui en fait une véritable mission à configurer.

Oh fyi, j'ai construit une application simple avec juste le fil principal, et un fil de comportement. Même problème. Tout ce que la comthread va faire est d'extraire des données du comportement. Même pas l'afficher, j'ai utilisé un moniteur de port série en arrière-plan pour vérifier le décalage.

Toutes les suggestions sont les bienvenues.

OK édition rapide: le PC XP est fraîchement construit. J'ai ouvert msn messenger, et le programme fonctionne bien. Il me manque évidemment un réglage ...

+0

Interrogez-vous les ports avec des intervalles fixes ou en utilisant des E/S superposées? Si interroger quel type de minuterie utilisez-vous? –

Répondre

4

Si vous utilisezSleep dans vos fils (d'où mon commentaire/requête à votre question), vous devez utiliser timeBeginPeriod pour indiquer votre résolution souhaitée. Comme vous l'avez déjà découvert, peu importe où vous l'appelez; peut être le fil principal ou même une application entièrement différente.

Voir ce thread sur les forums Embarcadero, et bien sûr le documentation (remarques) sur MSDN.

+0

Bonjour désolé de prendre mon temps à répondre, était un jour férié hier. Ceci l'a résolu. Lors de l'initialisation, j'ai juste dit timePeriodBegin (1) et il fonctionne sur tous mes os. Je suis un peu inquiet de savoir si je devrais même utiliser le sommeil. Mais comme on dit, si ça marche, ne le répare pas. Merci encore –

+0

@larry - De rien! et n'oubliez pas le 'timeEndPeriod'. :) –

1

Votre système d'exploitation est-il installé sur deux PC différents? Je suppose que l'un de vos ordinateurs a un vrai processeur dual-core (celui avec XP), et l'autre (celui avec Vista) a un processeur à un noyau. Parfois, l'application multi-thread révèle son problème lorsqu'il est exécuté sur un vrai processeur multi-core. Le débogueur Delphi modifie parfois l'affinité de la CPU, de sorte qu'il peut fonctionner sur le débogueur, mais pas en dehors de celui-ci. Autre possibilité à vérifier: essayez votre logiciel sous XP en paramétrant l'affinité avec un seul processeur. J'ai déjà vu ça. Mais c'est probablement autre chose, puisque vous avez dit que vous avez essayé votre logiciel dans plusieurs PC.