• 25-12-2020, 20:47:09
    #1
    Herkese merhaba,
    Bir Timer'a bağlı CreateProcess komutu sürekli çalışıyor. CreateProcess her çalıştığında GUI 2 3 saniye donuyor. Bunu nasıl çözebilirim? Bunun yerine QThread kullanılabilir mi?

    Örneğin;
    STARTUPINFO si;    
    si.dwFlags = STARTF_USESHOWWINDOW;    
    PROCESS_INFORMATION pi;    
    HANDLE hProcess;    
    HANDLE hThread;    
    DWORD dwProcessId = 0;    
    DWORD dwThreadId = 0;  
    ZeroMemory(&si, sizeof(si));    
    ZeroMemory(&pi, sizeof(pi));    
    si.cb = sizeof(si);
    
    LPTSTR cmdPath = _T("C:\\Windows\\System32\\cmd.exe");  
    LPTSTR cmdArgs = _T("/c ping www.google.com > result.txt");    
    
    BOOL bCreateProcess = CreateProcess(        
        cmdPath,        
        cmdArgs,        
        NULL,        
        NULL,        
       FALSE,      
       CREATE_NO_WINDOW,        
       NULL,        
       NULL,        
       &si,        
       &pi);
    
    WaitForSingleObject(pi.hProcess, INFINITE);    
    CloseHandle(pi.hProcess);    
    CloseHandle(pi.hThread);
    Buradaki ping komutu arka planda çalışıyor. İşlem bitene kadar GUI donuyor.
  • 25-12-2020, 23:44:33
    #2
    imc0der adlı üyeden alıntı: mesajı görüntüle
    Herkese merhaba,
    Bir Timer'a bağlı CreateProcess komutu sürekli çalışıyor. CreateProcess her çalıştığında GUI 2 3 saniye donuyor. Bunu nasıl çözebilirim? Bunun yerine QThread kullanılabilir mi?

    Örneğin;
    STARTUPINFO si;    
    si.dwFlags = STARTF_USESHOWWINDOW;    
    PROCESS_INFORMATION pi;    
    HANDLE hProcess;    
    HANDLE hThread;    
    DWORD dwProcessId = 0;    
    DWORD dwThreadId = 0;  
    ZeroMemory(&si, sizeof(si));    
    ZeroMemory(&pi, sizeof(pi));    
    si.cb = sizeof(si);
    
    LPTSTR cmdPath = _T("C:\\Windows\\System32\\cmd.exe");  
    LPTSTR cmdArgs = _T("/c ping www.google.com > result.txt");    
    
    BOOL bCreateProcess = CreateProcess(        
        cmdPath,        
        cmdArgs,        
        NULL,        
        NULL,        
       FALSE,      
       CREATE_NO_WINDOW,        
       NULL,        
       NULL,        
       &si,        
       &pi);
    
    WaitForSingleObject(pi.hProcess, INFINITE);    
    CloseHandle(pi.hProcess);    
    CloseHandle(pi.hThread);
    Buradaki ping komutu arka planda çalışıyor. İşlem bitene kadar GUI donuyor.
    Thread oluşturun, threadin içinde çalıştırın.
  • 26-12-2020, 01:31:14
    #3
    oguzhane adlı üyeden alıntı: mesajı görüntüle
    Thread oluşturun, threadin içinde çalıştırın.
    Teşekkürler. Qthread mi kullanmalıyım? Yoksa C++'ın kendi thread kütüphanesini mi kullanayım?
  • 26-12-2020, 01:52:26
    #4
    imc0der adlı üyeden alıntı: mesajı görüntüle
    Teşekkürler. Qthread mi kullanmalıyım? Yoksa C++'ın kendi thread kütüphanesini mi kullanayım?
    farkedeceğini sanmam ikisinde de çalışır büyük ihtimalle fakat qthread qt'ye göre optimize edilmiş olabilir onu kullanmanı tavsiye ederim.
  • 26-12-2020, 02:00:29
    #5
    oguzhane adlı üyeden alıntı: mesajı görüntüle
    farkedeceğini sanmam ikisinde de çalışır büyük ihtimalle fakat qthread qt'ye göre optimize edilmiş olabilir onu kullanmanı tavsiye ederim.
    Teşekkürler sağolun