CWinApp::OnIdle

เสมือน BOOL OnIdle ( ยาว lCount );

ส่งกลับค่า

ไม่ใช่ศูนย์รับเพิ่มเติมไม่ได้ใช้เวลาประมวลผล 0 ถ้าเวลาว่างที่ไม่จำเป็นต้องใช้?

พารามิเตอร์

lCount

ตัวนับที่เพิ่มขึ้นแต่ละครั้งที่OnIdleถูกเรียกเมื่อคิวข้อความของโปรแกรมประยุกต์ไม่ว่างเปล่า จำนวนนี้ถูกตั้งค่าใหม่เป็น 0 แต่ละครั้งที่มีการประมวลผลข้อความใหม่ คุณสามารถใช้พารามิเตอร์lCountเพื่อตรวจสอบระยะเวลาที่โปรแกรมประยุกต์ไม่ได้โดยไม่ต้องประมวลผลข้อความสัมพันธ์กัน?

หมายเหตุ

แทนที่ฟังก์ชันนี้สมาชิกเพื่อทำการประมวลผลที่ไม่ได้ใช้เวลาอยู่ OnIdleถูกเรียกในการวนรอบข้อความเริ่มต้นเมื่อคิวข้อความของโปรแกรมประยุกต์ไม่ว่างเปล่า ใช้แทนของคุณเพื่อเรียกตัวจัดการไม่ได้ใช้งานแบบพื้นหลังของคุณเอง?

OnIdleควรกลับ 0 เพื่อบ่งชี้ว่า ไม่มีเวลาการประมวลผลที่ไม่ได้ใช้งานไม่จำเป็น พารามิเตอร์lCountจะเพิ่มขึ้นแต่ละครั้งที่OnIdleถูกเรียกเมื่อ messagenbsp คิวว่างเปล่า และตั้งค่าเป็น 0 แต่ละครั้งที่มีการประมวลผลข้อความใหม่ คุณสามารถเรียกใช้ตามปกติของคุณไม่ได้ใช้งานแตกต่างกันตามการนับนี้(&N)?

ต่อไปนี้สรุปการประมวลผลแบบวนซ้ำที่ไม่ได้ใช้งาน:

  1. ถ้าการวนรอบข้อความในไลบรารี Microsoft Foundation Class ตรวจสอบคิวข้อความ และไม่พบข้อความที่ค้างอยู่ เรียก OnIdle สำหรับวัตถุของโปรแกรมประยุกต์และซัพพลาย 0 เป็นอาร์กิวเมนต์lCount?

  2. OnIdleดำเนินการประมวลผลบางอย่าง และส่งกลับค่าไม่ใช่ศูนย์เพื่อบ่งชี้ว่า ควรจะเรียกอีกครั้งเพื่อทำการประมวลผลเพิ่มเติม?

  3. การวนรอบข้อความตรวจสอบคิวข้อความอีกครั้ง ถ้าไม่มีข้อความอยู่ระหว่างการพิจารณา เรียก OnIdle อีก เพิ่มจำนวนตัวนับการโต้แย้งlCount?

  4. ในที่สุด 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)

Index