訊息迴圈不會導致cup使用率過高

2021-07-22 14:59:30 字數 535 閱讀 7263

bool winapi getmessage(//阻塞型函式

_out_ lpmsg lpmsg,

_in_opt_ hwnd hwnd,

_in_ uint wmsgfiltermin,

_in_ uint wmsgfiltermax

);while( (bret = getmessage( &msg, hwnd, 0, 0 )) != 0)

else

}

在呼叫getmessage的執行緒的訊息佇列中取得與它相關視窗的訊息放在乙個訊息結構後就返回。如果沒有訊息傳送到此函式第二個引數所代表的視窗,也沒有對這個執行緒的訊息,作業系統會掛起這個執行緒(一旦有訊息到達,程序會被喚醒,getmessage馬上返回)。放出這個執行緒的cpu控知權。所以cpu占有不是100%。

上面迴圈裡面的**遮蔽掉後, 是乙個死揗環,這樣沒有用任何

方式告訢系統你要交出控知權,所以你會在這個執行緒的時間段裡一直占用。直到此執行緒此輪的時間片用完。由系統強行切換別的執行緒執行。

不會使用索引,導致全表掃瞄情況

1.不要使用in操作符,這樣資料庫會進行全表掃瞄,推薦方案 在業務密集的sql當中盡量不採用in操作符 a 改為 a 4.is null 或is not null操作 判斷字段是否為空 5.及 操作符 大於或小於操作符 大於或小於操作符一般情況下是不用調整的,因為它有索引就會採用索引查詢,但有的情況...

不會使用索引,導致全表掃瞄情況

1.不要使用in操作符,這樣資料庫會進行全表掃瞄,推薦方案 在業務密集的sql當中盡量不採用in操作符 a 改為 a 4.is null 或is not null操作 判斷字段是否為空 5.及 操作符 大於或小於操作符 大於或小於操作符一般情況下是不用調整的,因為它有索引就會採用索引查詢,但有的情況...

不會使用索引,導致全表掃瞄情況

不會使用索引,導致全表掃瞄情況 1.不要使用in操作符,這樣資料庫會進行全表掃瞄,推薦方案 用not exists或者 外聯結 判斷為空 來代替 3 操作符 不等於 使用 同樣不會使用索引,因此對它的處理只會產生全表掃瞄 推薦方案 用其它相同功能的操作運算代替,如 a 0 改為 a 0 or a 0...