เสมือน BOOL OnIdle ( ยาว lCount );
ส่งกลับค่า
ไม่ใช่ศูนย์รับเพิ่มเติมไม่ได้ใช้เวลาประมวลผล 0 ถ้าเวลาว่างที่ไม่จำเป็นต้องใช้?
พารามิเตอร์
lCount
ตัวนับที่เพิ่มขึ้นแต่ละครั้งที่OnIdleถูกเรียกเมื่อคิวข้อความของโปรแกรมประยุกต์ไม่ว่างเปล่า จำนวนนี้ถูกตั้งค่าใหม่เป็น 0 แต่ละครั้งที่มีการประมวลผลข้อความใหม่ คุณสามารถใช้พารามิเตอร์lCountเพื่อตรวจสอบระยะเวลาที่โปรแกรมประยุกต์ไม่ได้โดยไม่ต้องประมวลผลข้อความสัมพันธ์กัน?
หมายเหตุ
แทนที่ฟังก์ชันนี้สมาชิกเพื่อทำการประมวลผลที่ไม่ได้ใช้เวลาอยู่ OnIdleถูกเรียกในการวนรอบข้อความเริ่มต้นเมื่อคิวข้อความของโปรแกรมประยุกต์ไม่ว่างเปล่า ใช้แทนของคุณเพื่อเรียกตัวจัดการไม่ได้ใช้งานแบบพื้นหลังของคุณเอง?
OnIdleควรกลับ 0 เพื่อบ่งชี้ว่า ไม่มีเวลาการประมวลผลที่ไม่ได้ใช้งานไม่จำเป็น พารามิเตอร์lCountจะเพิ่มขึ้นแต่ละครั้งที่OnIdleถูกเรียกเมื่อ messagenbsp คิวว่างเปล่า และตั้งค่าเป็น 0 แต่ละครั้งที่มีการประมวลผลข้อความใหม่ คุณสามารถเรียกใช้ตามปกติของคุณไม่ได้ใช้งานแตกต่างกันตามการนับนี้(&N)?
ต่อไปนี้สรุปการประมวลผลแบบวนซ้ำที่ไม่ได้ใช้งาน:
OnIdle
สำหรับวัตถุของโปรแกรมประยุกต์และซัพพลาย 0 เป็นอาร์กิวเมนต์lCount?OnIdle
ดำเนินการประมวลผลบางอย่าง และส่งกลับค่าไม่ใช่ศูนย์เพื่อบ่งชี้ว่า ควรจะเรียกอีกครั้งเพื่อทำการประมวลผลเพิ่มเติม?OnIdle
อีก เพิ่มจำนวนตัวนับการโต้แย้งlCount?OnIdle
งานไม่ได้ใช้งานทั้งหมดของการประมวลผล และส่งกลับค่า 0 แจ้งให้ทราบว่า การวนรอบข้อความการหยุดเรียก OnIdle
จนกว่าข้อความถัดไปได้รับจากคิวข้อความ ณจุดใดรอบการใช้งานเริ่ม ด้วยอาร์กิวเมนต์ที่ตั้ง tonbsp; 0(&N)?ไม่ต้องทำงานยาวระหว่างOnIdleเนื่องจากโปรแกรมประยุกต์ไม่สามารถประมวลผลผู้ใช้ป้อนข้อมูลจนกว่าส่งกลับOnIdle?
หมายเหตุnbsp เริ่มต้นใช้งานการOnIdleคำสั่งอินเทอร์เฟซผู้ใช้วัตถุเช่นรายการเมนูและปุ่มแถบเครื่องมือที่ปรับปรุง และโปรแกรมทำการล้างข้อมูลของข้อมูลภายในโครงสร้าง ดังนั้น ถ้าคุณแทนที่การOnIdleคุณต้องเรียกCWinApp::OnIdleกับlCountในรุ่นของคุณ overridden เรียกทั้งหมด base-คลาสประมวลผลใช้งานครั้งแรก (นั่นคือ จนคลาสพื้นฐานOnIdleส่งกลับค่า 0) ถ้าคุณต้องการทำงานก่อนเสร็จสิ้นการประมวลผลคลาส base ทบทวน base-คลาสใช้งานเมื่อต้องการเลือกเหมาะสมlCountในระหว่างที่ทำงานของคุณ(&N)?
ตัวอย่าง
ในสองตัวอย่างต่อไปนี้แสดงวิธีการใช้OnIdle ตัวอย่างแรกประมวลผลสองงานที่ว่างใช้อาร์กิวเมนต์lCountจัดระดับความสำคัญของงาน งานแรกเป็นความสำคัญสูง และคุณควรทำได้เมื่อใดก็ ตามที่เป็นไปได้ งานสองมีความสำคัญน้อย และควรทำเฉพาะเมื่อมีการหยุดยาวในการป้อนข้อมูลของผู้ใช้ หมายเหตุการโทรOnIdleรุ่น base-คลาส ตัวอย่างสองจัดการกลุ่มของงานที่ไม่ได้ใช้งานด้วยระดับความสำคัญที่แตกต่างกัน?
BOOL CMyApp::OnIdle(LONG lCount)
{
nbsp BOOL bMore = CWinApp::OnIdle(lCount)
ถ้า (lCount == 0)
{
สืบค้นกลับ ("App ว่างระยะสั้น time\n");
bMore = TRUE
}
else if (lCount == 10)
{
สืบค้นกลับ ("App เป็นเวลาระยะยาว time\n");
bMore = TRUE
}
else if (lCount == 100)
{
สืบค้นกลับ ("App เป็นเวลายาวแม้ยอด time\n");
bMore = TRUE
}
else if (lCount == 1000)
{
สืบค้นกลับ ("App ไม่ได้ใช้งานค่อนข้างเป็นระยะเวลานาน time\n");
/ / bMore ถูกตั้งค่าเป็น TRUE ไม่จำเป็นที่ไม่ได้ใช้
/ / สำคัญ: bMore ไม่ได้ตั้งค่า FALSE เนื่องจากอาจ CWinApp::OnIdle
/ / มีการว่างงานเพิ่มเติมเพื่อให้เสร็จสมบูรณ์
}
กลับ bMore
/ / กลับ TRUE ตราบใดที่มีการทำงานที่ไม่ได้ใช้งานเพิ่มเติม
}(&N)
ตัวอย่างที่สอง
// In this example, four idle loop tasks are given various
// opportunities to run:
// Task1 is always given a chance to run during idle time, provided
// that no message has queued up while the framework was processing
// its own idle loop tasks (at lCount levels 0 and 1).
// Task2 is given a chance to run only if Task1 has already run,
// provided that no message has queued up while Task1 was running.
// Task3 and Task4 are given a chance to run only if both Task1 and
// Task2 have already run, and no message has queued up in the mean
// time. If Task3 gets its chance to run, then Task4 always gets
// a chance to run immediately after Task3.
BOOL CMyApp::OnIdle(LONG lCount)
{
// In this example, as in most applications, you should let the
// base class CWinApp::OnIdle complete its processing before you
// attempt any additional idle loop processing.
if (CWinApp::OnIdle(lCount))
return TRUE;
// The base class CWinApp::OnIdle reserves the lCount values 0
// and 1 for the framework's own idle processing. If you wish to
// share idle processing time at a peer level with the framework,
// then replace the above if-statement with a straight call to
// CWinApp::OnIdle; and then add a case statement for lCount value
// 0 and/or 1. Study the base class implementation first to
// understand how your idle loop tasks will compete with the
// framework's idle loop processing.
switch (lCount)
{
case 2:
Task1();
return TRUE; // next time give Task2 a chance
case 3:
Task2();
return TRUE; // next time give Task3 and Task4 a chance
case 4:
Task3();
Task4();
return FALSE; // cycle through the idle loop tasks again
}
return FALSE;
}
ภาพรวม CWinApp |nbsp สมาชิกของคลาส| แผนภูมิของลำดับชั้น(&N)