我是使用ffmpeg.exe來進行視頻格式的轉換的:
第一:我執行一個main方法,這時(java.exe)這個進程就會被load到內存中被執行,然後繼續執行main的主線程。
第二:這時我又開了一個其他線程,來執行視頻的格式轉換,此時會幫我新創建出一個新進程(ffmpeg.exe)來。
第三:這時候出現了兩個進程,隨之而來的也出現了問題。
經過分析測試發現:
1、只有java.exe進程結束後,才會執行ffmpeg這個進程。這並不是我想要的。
2、我需要的執行順序是這樣:先執行java.exe進程,再轉碼進程ffmpeg.exe執行完,然後再繼續java.exe進程
3、因為在執行ffmpeg.exe這個進程中,我需要通過java.exe進程 來檢測ffmpeg.exe進程的視頻轉碼是否完成,返回給客戶端,判斷是否繼續執行
我的問題:
1、java在創建進程的時候是否可以設置該進程的優先級?
2、我可以通過java來獲取一個進程的執行時間麼?
3、為什麼只有在java.exe進程結束後才會執行ffmpeg.exe進程?
4、默認的cpu調度進程的算法是什麼算法啊?(windows)
特別說明:
1、可能我的表達不是很清楚,各位大神的幫忙,小弟不勝感激。
2、文字會比較多,如果看不太懂,我可以具體說說
按照我的理解,你的需求就是在java的主進程中調用一個ffmpeg.exe,這個在java中應該是這樣的代碼:
String[] cmdArray = buildComStringArray(cmd);//忽略實現cmd就是你的fmpeg.exe
ProcessBuilder pb = new ProcessBuilder(cmdArray);
pb.redirectErrorStream(true);
Process child = pb.start();
然後就可以使用child.waitFor();等待結束後繼續你的java其他業務邏輯