30/09/2018, 19:03

QT + MINGW dịch sai?

Chào các bạn !

Mình có test đoạn code này

QElapsedTimer tmr;


void MainWindow::on_pushButton_clicked()
{
    tmr.restart();
    int m=0;
    for(int i=0;i<2000000000;i++)
    {
        m+=1;
    }
    qint64 t = tmr.elapsed();
    ui->label->setText(QString::number(t) + "-" + QString::number(m));
}

Kết quả hiển thị trên label là “0-2000000000”. Như vậy đoạn code chạy không đến 1ms.
Có bạn nào gặp vậy chưa nhỉ.

*grab popcorn* viết 21:06 ngày 30/09/2018

Một số trình biên dịch sẽ tối ưu lại code trước khi biên dịch

Văn Dương viết 21:05 ngày 30/09/2018

Nhưng chỗ nào để cho nó không tối ưu cái này nhỉ ? Vì mục đích của mình là nó phải lặp đúng chỗ này @@.

viết 21:12 ngày 30/09/2018

build ở chế độ Debug thì nó sẽ ko tối ưu.

*grab popcorn* viết 21:17 ngày 30/09/2018

Nhưng vòng lặp for kia.
Nó đoán đc kết quả cuối cùng. Nên thay vì phải chạy để làm từng vòng lặp, thì nó sẽ tính ra kq và gán trực tiếp luôn.
Tuy nhiên chỉ tối ưu nhũng cái đơn giản thôi.
Bạn lồng nhân chia if else vô là có thể nó sẽ bị chậm.

Văn Dương viết 21:12 ngày 30/09/2018

Mình muốn lợi dụng for để trễ 100us chẳng hạn, tối ưu thế thì chết

viết 21:07 ngày 30/09/2018

dùng for để làm trễ

trên Windows thì #include <windonws.h> rồi xài Sleep(miliseconds). Sleep ít hơn 1ms thì ta ko biết

Văn Dương viết 21:04 ngày 30/09/2018

Bên C Embed toàn làm vậy

Văn Dương viết 21:17 ngày 30/09/2018

Cả 2 đều như nhau

Bài liên quan
0