utilizzando: C++ (MinGW)
, Qt4.7.4
, Vista (OS)
, intel core2vPro
CPU core non utilizzati correttamente utilizzando qthreads
ho bisogno per elaborare i 2 file di grandi dimensioni esattamente nello stesso modo. Quindi vorrei chiamare la routine di elaborazione da 2 thread separati per 2 file separati. Il thread della GUI non fa niente di pesante; visualizza solo un'etichetta e avvia un ciclo di eventi per verificare l'emissione delle condizioni di terminazione del thread e chiude di conseguenza l'Applicazione principale. Mi aspettavo che questo utilizzasse i due core (intel core2) in modo un po 'uguale, ma al contrario vedo dal Task Manager che uno dei core è molto utilizzato e l'altro no (anche se non ogni volta che eseguo il codice); anche il tempo necessario per elaborare i 2 file è molto più del tempo impiegato per elaborare un file (ho pensato che avrebbe dovuto essere uguale o un po 'di più ma è quasi uguale all'elaborazione dei 2 file uno dopo l'altro in un file non threadato applicazione). Posso forzare in qualche modo i thread a usare i core che ho specificato?
QThread* ptrThread1=new QThread;
QThread* ptrThread2=new QThread;
ProcessTimeConsuming* ptrPTC1=new ProcessTimeConsuming();
ProcessTimeConsuming* ptrPTC2=new ProcessTimeConsuming();
ptrPTC1->moveToThread(ptrThread1);
ptrPTC2->moveToThread(ptrThread2);
//make connections to specify what to do when processing ends, threads terminate etc
//display some label to give an idea that the code is in execution
ptrThread1->start();
ptrThread2->start(); //i want this thread to be executed in the core other than the one used above
ptrQApplication->exec(); //GUI event loop for label display and signal-slot monitoring
I file sono su dischi rigidi fisici separati? Se stai cercando di far ruotare ruggine per leggere due file contemporaneamente, devi cercare tra loro ogni volta che viene programmato un thread diverso e quella parte sommergerà qualsiasi cosa tu possa ottenere dalla CPU. –
I file hanno dimensioni approssimativamente uguali? – Tudor
@PeteKirkham: basta avere 1 HDD – ustulation