Pomiar czasu działania innej aplikacji

0

Witam! Mam następujący problem: chciałbym napisać program,który będzie mierzył czas działania konkretnego zadania(jednego z wielu) jakie wykonuje komercyjna aplikacja. Dla ustalenia uwagi przyjmijmy, ze jest to program okienkowy szyfrujący ,deszyfrujący , podpisujący dane itd. Z tego co zdążyłem zauważyć(z pomocą Process Explorera), to za każde z tych zadań jest odpowiedzialny inny proces , a właściwie wątek. Myślałem ,żeby odnieść się do tych wątków poprzez uchwyty i użyć funkcji API GetThreadTimes(). Ale w programie Process Explorer jest widoczny tylko punkt wejścia funkcji w bibliotece dll. Myślałem żeby użyć funkcji GetCurrentThread() , ale nie wiem jak ją umieścić w swoim programie, aby zwracała mi uchwyt do wątku, który chcę zbadać. Będę wdzięczny za wszystkie wskazówki i rady.

0

Najpierw spróbowałbym dobrać się do pętli komunikatów, hook na komunikaty jest najszybciej do zrobienia. Może uda ci się na podstawie komunikatów określić co się dzieje w aplikacji.
W przeciwnym wypadku to podstawową rzeczą jest uruchomienie tej aplikacji jako proces potomny twojej, czyli przez CreateProcess. Wtedy masz dużo więcej uprawnień do tego procesu.

0

Witam! Gdy próbuję uruchomić proces za pomocą CreateProcess(podając ścieżkę dostępu do pliku exe), to program się kompiluje, ale wywala błąd systemowy i chce wysyłać raport o błędach. W czym może tkwić problem?

0

W błędnym kodzie. Pokaż go.

0

OTO kod:
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <iostream>

int main()
{
// jakies wczesniejsze instrukcje

//DWORD dwMiliseconds = GetTickCount();

/* Utworzenie procesu */
CreateProcess( "C:\Program Files\PGP Corporation\PGP for Windows XP\PGPmail.exe",
NULL, NULL,
NULL, FALSE, CREATE_NEW_PROCESS_GROUP,
NULL, NULL, NULL, NULL );

/* Oczekiwanie az obiekt jadra bedzie wolny,

  • czyli innymi slowy az proces sie zakonczy
    */
    //WaitForSingleObject( hProcess, INFINITE );

/* Obliczanie ile czasu uplynelo,

  • poprzez obliczenie roznicy
    */
    //dwMiliseconds = GetTickCount() - dwMiliseconds;

//std::cout << "Proces pracowal przez: " << dwMiliseconds << " ms. ";
//getchar();

return 0;
}

0

Dwa ostatnie parametry CreateProcess nie mogą być NULL. Przedostatni to wskaźnik na strukturę STARTUPINFO którą musisz wypełnić. Ostatni to wskaźnik na strukturę do której zwracane są informacje o utworzonym procesie.

Czytaj dokumentację i forum !
http://msdn.microsoft.com/en-us/library/ms682425.aspx
http://msdn.microsoft.com/en-us/library/ms682512.aspx
http://4programmers.net/Forum/search.php?q=CreateProcess

0

Problem czasu działania wątku mam już rozwiązany.Ale pojawiło się następne pytanie: Jak sprawdzić czy wątek jest aktywny?Chodzi mi o czas, w którym wątek faktycznie coś wykonuje(np. szyfruje dane jak program PGP) w tym sensie, że widać w ProcessExplorerze wysokie użycie procesora

1 użytkowników online, w tym zalogowanych: 0, gości: 1