Ich habe zwei Programme in C++ geschrieben, die Winsock verwenden. Beide akzeptieren TCP-Verbindungen und einer sendet Daten, während der andere Daten empfängt. Sie sind in Visual Studio 2008 kompiliert. Ich habe auch ein in C# geschriebenes Programm, das sich mit beiden C++ - Programmen verbindet und die Pakete, die es von einem empfängt, weiterleitet und an das andere sendet. Dabei zählt und zeigt es die Anzahl der weitergeleiteten Pakete an. Außerdem wird die verstrichene Zeit vom ersten bis zum letzten Paket angezeigt.Programme laufen in 2 Sekunden auf meinem Rechner, aber 15 Sekunden auf anderen
Das C++ - Programm, das Pakete sendet, führt einfach 1000-mal eine Schleife durch, wobei die genau gleichen Daten gesendet werden. Wenn ich alle drei Apps auf meinem Entwicklungscomputer starte (mit Loopback oder tatsächlicher IP), durchlaufen die Pakete in etwa 2 Sekunden das gesamte System. Wenn ich alle drei auf einem anderen PC in unserem Labor laufe, dauert es immer zwischen 15 und 16 Sekunden. Jeder PC hat verschiedene Prozessoren und Speicher, aber auf allen läuft Windows XP Professional. Mein Entwicklungs-PC hat tatsächlich einen älteren AMD Athlon mit halb so viel Speicher wie einer der Rechner, der diese Aufgabe länger braucht. Ich habe das CPU-Zeitdiagramm im Task-Manager auf meiner Maschine und ein anderes beobachtet und keiner von ihnen verwendet eine signifikante Menge des Prozessors (d. H. Mehr als 10%), während diese Programme laufen.
Hat jemand irgendwelche Ideen? Ich kann nur denken, Visual Studio auf einem Zielcomputer zu installieren, um zu sehen, ob es etwas damit zu tun hat.
Problem gelöst ============================================ ========
Ich installierte zuerst Visual Studio, um zu sehen, ob das irgendwelche Wirkung hatte und es nicht tat. Dann habe ich die Programme auf meinem neuen Entwicklungs-PC getestet und es lief genauso schnell wie mein altes. Das Ausführen der Programme auf einem Vista-Laptop ergab wieder 15 Sekunden.
Ich habe Zeitstempel auf beiden Seiten bestimmter Anweisungen im Serverprogramm gedruckt, um zu sehen, welche am längsten dauerte, und ich fand, dass die Verzögerung durch einen Sleep() - Methodenaufruf von 1 Millisekunde verursacht wurde. Anscheinend wurde auf meinen alten und neuen Systemen der Sleep (1) ignoriert, weil ich irgendwo zwischen 10 und> 20 Pakete in derselben Millisekunde senden würde. Gelegentlich hatte ich eine Ausführungszeit von etwa 15 oder 16 Millisekunden, was zu einer Zeit von etwa 2 Sekunden für 1000 Pakete führte. Auf den Systemen, die ungefähr 15 Sekunden benötigten, um 1000 Pakete zu durchlaufen, hätte ich entweder eine Lücke von 15 oder 16 Millisekunden zwischen dem Senden jedes Pakets.
Ich habe den Aufruf der Sleep() -Methode auskommentiert und jetzt werden die Pakete sofort gesendet. Danke für die Hilfe.
Sleep() ist nur garantiert mindestens so lange schlafen, wie Sie verlangen. Es könnte viel länger schlafen. Ich glaube an Windows gibt es eine Funktion, die Sie anrufen können, um nach engen Multimedia-Timings zu fragen, die dieses Verhalten ändern werden. –
http://msdn.microsoft.com/en-us/library/windows/desktop/dd743626%28v=vs.85%29.aspx –