2011-09-05 136 views
1

我寫了這個小程序來說明我的問題:控股滾動條凍結Win32控制檯應用程序

int main(int argc, char* argv[]) 
{ 
    int i = 0; 
    while(1) 
    { 
     std::cout << i++ << std::endl; 
     Sleep(1000); 
    } 
    return 0; 
} 

所以這個簡單的程序將停止計數,如果你持有的垂直滾動條(看回日誌或任何... )。

有沒有辦法避免這種情況?

乾杯

+0

是否做同樣的事情,當你通過標題欄拖動它(因爲我沒有一臺機器上有一個編譯器沒有測試過這一點)?因爲它可能只是Windows或控制檯的一個功能 – bcoughlan

+0

如果開始選擇文本,控制檯應用程序也會凍結。這是非常煩人的,但我擔心這是一個「特徵」 - 但看看這是否記錄在任何地方會很有趣。 –

+0

使用線程也不能解決問題。當滾動條被操作時,它顯然會碰到控制檯窗口處理程序持有的鎖。我懷疑有一個解決方法。 –

回答

7

不是真的。會發生什麼是持有滾動條阻止應用程序寫入任何新的輸出到控制檯,所以它最終會阻止沖洗std :: cout。這是由於Windows如何實現控制檯並且無法避免。

0

如果你不能依靠程序的繼續執行,你可以根據從最初的程序所經過的時間,而不是計算i

#include <ctime> 

time_t initialSeconds; 

int main(int argc, char* argv[]) 
{ 
    double i=0; 

    //Initialise time 
    initialSeconds = time (NULL); 

    while(1) { 
    i = difftime(initialSeconds, time(NULL)); 
    sleep(1000); 
    } 
} 

這將計算的秒數經過基於電腦時鐘。

+0

我的例子是爲了說明問題。我真正的代碼是做網絡的東西,這種解決方法無法工作。 – Tryum