我正在尋找VB等效的VB doevents。 我在VB中編寫了一個實時分析包,並使用doevents發佈到操作系統。 Doevents允許我留在內存中,並且不會填滿內存並且可以讓我響應用戶輸入。 我已經重寫了PHP中的包,我正在尋找同樣的doevents功能。 如果它不存在,我可以重新安排自己並退出。 但我目前不知道該怎麼做,我認爲這會增加更多的開銷。 謝謝gerardg我正在尋找VB等效的VB doevents
回答
它已經近10年,因爲我上次在VB寫的任何東西,我記得的DoEvents()函數允許應用程序屈服於深加工過程中的處理器(通常以允許其他系統事件火 - 最常見的是WM_PAINT,這樣你的UI就不會出現掛起)。
我不認爲PHP有這樣的功能 - 你的腳本將作爲一個單獨的進程運行並結束(無論是當它完成或當它達到默認的30秒超時)。
如果您在思考線程(如大多數Windows程序員傾向於這樣做)並且需要產生一個以上的腳本實例,或許您應該看看PHP's Process Control functions作爲開始。
回答Jahufar:謝謝。你理解我的問題。你和Marc B都說PHP沒有這個功能。看起來我可能能夠使用您發送的過程控制功能重新安排我的自我。我將在我自己的服務器上測試Cyclone對set_time_limit($ time),其他函數和控制函數的建議。 (我正在ISP的機器上開發,無法控制系統。)當我的服務器到達後,我會回到這裏進行更新,我可以嘗試一下。謝謝。 – gerardg
我不完全確定你想要模擬的doevents的哪些方面,所以這裏幾乎所有可能對你有用的東西。
您可以在腳本的頂部使用ob_implicit_flush(true)
啓用隱式輸出緩衝區刷新。這意味着,只要您的腳本調用echo
或print
或任何您用來顯示內容的東西,PHP就會自動將其全部發送到用戶的瀏覽器。您也可以在每次調用之後使用ob_flush()
來顯示某些內容,在VB中更像Application.DoEvents()
,以保證您的UI處於活動狀態,但每次輸出內容時都必須調用它。
當然,如果您的腳本已經使用了輸出緩衝區,您可以在刷新之前構建一個緩衝區副本,其中ob_get_contents()
。
如果您需要讓腳本比平時運行更多時間,可以使用set_time_limit($time)
設置更長的時間。如果你需要更多的內存,並且您可以訪問編輯您的.htaccess文件,把下面的代碼和編輯值:
php_value memory_limit 64M
,用於設置空間限制爲64兆字節。
要一次運行多個腳本,可以使用pcntl_exec
開始另一個運行。
如果我錯過了關於DoEvents()的重要信息,請告訴我,我會盡力幫助您使其工作。
usleep是你在找什麼..延遲程序執行的微秒 http://php.net/manual/en/function.usleep.php
usleep不像doevents那樣活躍,因爲它只會延遲執行而不是讓控制回到其他進程。我打開一個頁面標籤來測試一個php輸出js代碼來改變文檔標題的內容,並用一個計數器值並且使用usleep來延遲每0.01s,但是當這個測試程序仍在更新文檔標題時,我不能點擊其他頁面標籤。 –
我在找什麼 – Andrew
PHP是專爲需要處理異步給定數。然而,它可能被迫成爲一個有點嘮叨的背景任務。
由於PHP作爲一個單獨的線程運行,因此您不必擔心讓CPU執行其他已經處理好的操作。如果情況並非如此,那麼Web服務器一次只能提供一個頁面,所有其他請求將不得不坐在隊列中。你需要編寫一些永不過期的外觀,直到發現一些可檢測到的情況(比如你在數據庫中設置的「現在請退出」消息)。
正如其他人指出的那樣,如果在每個循環中吃掉非常多的CPU,代碼將停止運行「速度太快」,因此您需要使用set_time_limit($something);
或者usleep
。但是,如果您還在使用數據庫連接,則大部分腳本時間實際上是等待數據庫的腳本(迄今爲止腳本的最大開銷)。
我已經看到了PHP工作線程使用屏幕創建並將其分派到後臺任務。只要您沒有會超時或退出的會話(例如,當瀏覽器關閉時),其他方法也可以使用。啓動腳本以檢查腳本是否每x分鐘或幾小時運行一次的cron可讓您自動從強制存在和/或系統重新啓動進行恢復。
TL; DR:DR:doevents被「烘烤」到PHP中,您不必擔心它。
- 1. C#等價於VB 6 DoEvents
- 2. 在VB 6.0中使用DoEvents()
- 3. Silverlight OpenFileDialog等效DoEvents
- 4. 等效於C++的DoEvents?
- 5. 找零在VB
- 6. 'break'的等效VB關鍵字
- 7. VB等效的C#事件創建
- 8. VB #const,/ const等
- 9. 我正在爲python尋找FDIST的等效函數
- 10. 是否有錯誤/恢復下一個模式的VB等效的VB?
- 11. VB +找到fso.FileExists
- 12. Java的等價VB的Request.InputStream
- 13. VB-新的VB Excel
- 14. 如果在VB中使用「in」的等效Excel中的
- 15. 在ASPX VB簡單HttpResponse VB
- 16. 如何找到在VB
- 17. VB - 查找文件
- 18. 在VB中尋找模擬退火實現
- 19. 等到WebBrowser加載? (VB 2010)
- 20. VB等網頁加載
- 21. 尋找一個靈活的替代標準的VB消息框
- 22. 在Linux中尋找kstat等效
- 23. 在VB
- 24. 在VB
- 25. 在VB
- 26. 在VB
- 27. 在VB
- 28. 在VB
- 29. 在VB
- 30. 在VB
你是否觸發代碼作爲網頁,或作爲cron工作? – BugFinder
PHP不適用於實時處理。除非你在一個合作的多任務系統上(例如Win 3.x),否則在某些時候腳本的時間片將被耗盡,並且控制將被從中排除。 –
回答BugFinder問題:我從網頁按鈕啓動代碼。 – gerardg