try/catch with timeout
    23 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
I have an instruction block with communication to external components, enclosed in try/catch. However, instead of throwing an exceptionand skipping to the "catch" part, the execution simply stalls under certain conditions. Is there any way top realize something like
try (max execution time x seconds)
    instructions with possible stall
catch ME
    will be executed either if instructions within try throw an exception or their execution takes more than x s
end
1 Commento
  Rik
      
      
 il 18 Mar 2021
				As far as I'm aware, this is only possible by spawning a new process, which then needs to signal to the main process that it is done by writing a file or something similar.
Risposte (1)
  Harsh Mahalwar
      
 il 5 Mar 2024
        
      Modificato: Harsh Mahalwar
      
 il 5 Mar 2024
  
      Hi Lionel, 
As there are several parts to this question, I will be solving it iteratively. 
- Running an external application/component from MATLAB.
 
This can be achieved by using the start command along with the “system” function in MATLAB. 
         2. Waiting x seconds for the application’s process to end. 
This can be achieved by using timeout or PING commands along with “system” function in MATLAB. 
Here's a workaround which uses "system" function of MATLAB along with start and ping commands in Windows to achieve the same: 
line1 = convertCharsToStrings('start "" "C:\Users\harsh\Desktop\Demo.txt"'); 
line2 = "PING -n 6 127.0.0.1>nul"; 
line3 = convertCharsToStrings('taskkill /F /FI "WindowTitle eq Demo - Notepad" /T >> "logs.txt"'); 
try 
    % opens the demo.txt file 
    system(line1); 
    % timeout of 5 seconds 
    system(line2); 
    % tries to kill the process and creates logs.txt with it's output. 
    system(line3); 
    % Read the log.txt  
    output = readlines("logs.txt"); 
    logOutput = convertStringsToChars(output(1, 1)); 
    % If the first 7 characters are eq to 'Success' that would mean that 
    % our script had to terminate the process. 
    if logOutput(1:7) ~= 'SUCCESS' 
        disp("Process was closed on time!"); 
    else 
        error("Process Terminated!"); 
    end 
catch exception 
    disp(['Error: ' exception.message]); 
end 
(Note that this workaround is valid for Windows only)
You can learn more about “system” function in MATLAB using the following documentation: 
I hope this helps, thanks!  
Vedere anche
Categorie
				Scopri di più su Startup and Shutdown in Help Center e File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!