Είναι gettimeofday () εγγυημένη για να είναι το ψήφισμα του δευτερολέπτου;




Είμαι porting ένα παιχνίδι, που γράφτηκε αρχικά για το API του Win32, στο Linux (καλά, porting το λιμάνι OS X στο λιμάνι Win32 στο Linux).


Έχω υλοποιηθεί `QueryPerformanceCounter`δίνοντας τις uSeconds δεδομένου ότι η διαδικασία εκκίνησης: 



```
BOOL QueryPerformanceCounter(LARGE_INTEGER* performanceCount)
{
    gettimeofday(&currentTimeVal, NULL);
    performanceCount->QuadPart = (currentTimeVal.tv_sec - startTimeVal.tv_sec);
    performanceCount->QuadPart *= (1000 * 1000);
    performanceCount->QuadPart += (currentTimeVal.tv_usec - startTimeVal.tv_usec);

    return true;
}

```

Αυτό, σε συνδυασμό με την `QueryPerformanceFrequency()`δίνοντας μια σταθερή 1000000 όπως η συχνότητα, λειτουργεί καλά **στον υπολογιστή μου** , που μου έδωσε μια μεταβλητή 64 bit, η οποία περιέχει `uSeconds`από το ξεκίνημα του προγράμματος.


Έτσι *είναι αυτό το φορητό;* Δεν θέλω να ανακαλύψετε λειτουργεί με διαφορετικό τρόπο αν ο πυρήνας συντάχθηκε με ένα συγκεκριμένο τρόπο ή κάτι τέτοιο. Είμαι μια χαρά με το που είναι μη φορητών με κάτι άλλο εκτός από Linux, όμως.
Μπορεί. Αλλά έχετε μεγαλύτερα προβλήματα. `gettimeofday()`μπορεί να οδηγήσει σε λανθασμένη χρονισμούς αν υπάρχουν διεργασίες στο σύστημά σας που αλλάζουν το χρονόμετρο (δηλαδή, ntpd). Σε ένα «κανονικό» linux, όμως, πιστεύω ότι η ανάλυση της `gettimeofday()`είναι 10us. Μπορεί να μεταβείτε προς τα εμπρός και προς τα πίσω και το χρόνο, κατά συνέπεια, με βάση τις διεργασίες που τρέχουν στο σύστημά σας. Το γεγονός αυτό καθιστά ουσιαστικά την απάντηση στην ερώτησή σας δεν είναι.


Θα πρέπει να εξετάσουμε `clock_gettime(CLOCK_MONOTONIC)`για το χρονοδιάγραμμα διαστήματα. Πάσχει από πολλά λιγότερα προβλήματα λόγω τα πράγματα όπως multi-core συστήματα και εξωτερικές ρυθμίσεις του ρολογιού.


Επίσης, εξετάζει την `clock_getres()`λειτουργία.
ναι την έχει, απλά δεν το εγραψα

το σταματάω και λεει 4 packets transmitted, 0 received, 100% packet loss, time 3055ms

θα δοκιμασω με κάποιο live και θα αναφέρω

–

εβαλα live centos και συνδέεται κανονικά. μπηκα τώρα από recovery mode και ψαχνω να δω τι γίνεται. το ping 8.8.8.8 λεει ακόμα network… λύθηκε το πρόβλημα!

σας ευχαριστώ όλους για τις απαντήσεις.

τρέχοντας την εντολη systemd-analyze critical-chain παρατήρησα ότι το sysinit.target έκανε ενάμιση λεπτό να φορτώσει.

το έλυσα αλλάζοντας την τιμή uuid του swap partition στο αρχείο /etc/fstab. Έκανα τα εξής:


Αποθηκεύεται αυτόματα στη βάση δεδομένων κάθε φορά που κάτι νέο ήρθε.


Στη συνέχεια έτρεξε ένα php βρόχο που κάθε λίγα λεπτά ελέγχονται για να διαπιστωθεί αν υπάρχει κάτι νέο στη βάση δεδομένων που ταιριάζει με τις παραμέτρους του νέου αυτού συμβάντος (συμπεριλαμβανομένων ότι happenned εντός του χρονικού πλαισίου των τελευταίων λεπτών). Θα χρησιμοποιηθεί `flush();`και στη συνέχεια `sleep(120);`στο βρόχο για να πάρει το βρόχο για να συνεχίσει να τρέχει κάθε λίγα λεπτά, έως ότου η νέα info ήρθε στην οποία περίπτωση θα `break();`ή `die();`. αν δεν έχεις πρόβλημα, καλύτερα μην κάνεις τίποτα. όπως το βλέπω μάλλον είναι αδιάφοροι αισθητήρες που δεν αναγνωρίζονται σωστά. (μπορείς να ελπίζεις ότι απλά θα φτιάξει σε επόμενους πυρήνες linux, αλλά πιστεύω δεν είναι καν σημαντικό θέμα) ναι, σου το λέει ότι βασίζεται στον πυρήνα linux 5.4 που είναι διαθέσιμος και στον 20.04. αυτό σε καμία περίπτωση δεν σημαίνει ότι βασίζεται στο ubuntu 20.04.

οι διανομές linux δεν είναι ενιαίο σύστημα αλλά αποτελείται από διάφορα τμήματα τα οποία μπορείς να αλλάζεις σε κάποιο βαθμό. δες :

… <p>μπορείτε να λάβετε ροή εξόδου για τη σύνδεση και να γράψετε τη συμβολοσειρά ερώτησης παραμέτρων σε αυτήν.</p><pre><code>url url = new url("http://yoururl.com"); httpsurlconnection conn = (httpsurlconnection) url.openconnection(); conn.setreadtimeout(10000); conn.setconnecttimeout(15000); conn.setrequestmethod("post"); conn.setdoinput(true); conn.setdooutput(true); list&lt;namevaluepair&gt; params = new arraylist&lt;namevaluepair&gt;(); params.add(new basicnamevaluepair("firstparam", paramvalue1)); params.add(new basicnamevaluepair("secondparam", paramvalue2)); params.add(new basicnamevaluepair("thirdparam", paramvalue3)); outputstream os = conn.getoutputstream(); bufferedwriter writer = new bufferedwriter( new outputstreamwriter(os, "utf-8")); writer.write(getquery(params)); writer.flush(); writer.close(); os.close(); conn.connect(); </code></pre><p>...</p><pre><code>private string getquery(list&lt;namevaluepair&gt; params) throws unsupportedencodingexception { stringbuilder result = new stringbuilder(); boolean first = true; for (namevaluepair pair : params) { if (first) first = false; else result.append("&amp;"); result.append(urlencoder.encode(pair.getname(), "utf-8")); result.append("="); result.append(urlencoder.encode(pair.getvalue(), "utf-8")); } return result.tostring(); } </code></pre> πολλή πιθανόν. για δες, έχεις tweaks και στο extensions έχεις ενεργοποιήσει το dash to panel και έχεις και ξεχωριστό extensions και έχεις ενεργοποιήση το ubuntu dock? ή το ανάπόδο?

[[image]](https://linux-user.gr/uploads/default/original/2x/f/f195d7a286ccf5d9cfa6e519190133787b8be50a.png "image") όπως το περιγράφεις μοιάζει με bug για τον lightdm. ίσως να είναι κάτι μικρό και να θέλει απλώς κάποια ρύθμιση (ψάξε μέσα στο /etc για τον lightdm) αλλά θα έλεγα απλά δοκίμασε άλλον dm. είχα κακή εμπειρία με τον lightdm παλιότερα. έχω εξαιρετική εμπειρία τελευταία με τον sddm (όταν πρωτοβγήκε ήταν χ… όλα εντάξει εν τέλει με την εγκατάσταση.

δημιούργησα 1 partition / στον ssd μεγέθους 80gb

που συμπεριλαμβάνει και τον bootloader.

το υπόλοιπο του ssd έμεινε αχρησιμοποίητο.

δημιούργησα 1 partition /home στον hdd (2tb)

και όλα λειτουργούν άψογα.

η διαφορά στο χρόνο εκκίνησης του υπολογιστή

είν… [εικόνα] georgie2:

όνια πολλά!

δοκίμασες (αν τεχνικά γίνεται) να αλλάξεις τα καλώδια;

(η asus στο display port και η dell στ

h dell δεν έχει hdmi και θα χρειαστώ converter (που έχω), αλλά δεν θα αλλάξει κάτι. by default το linux mint τοποθετεί το δεύτερο μονιτορ δεξιά.

λοιπόν ψάχτηκα αρκετ…