2012-07-24 11 views
6

मैं सी ++ बिल्डर के लिए नया हूं और थ्रेडिंग से अपरिचित हूं, मुझे उम्मीद थी कि कोई उदाहरण पोस्ट कर सकता है या मुझे सही दिशा में इंगित कर सकता है।सी ++ बिल्डर में थ्रेड

मेरे पास एक ऐसा फॉर्म है जो सी ++ बिल्डर में formShow() फ़ंक्शन लोड करता है। यह वही करता है जो मैं अपने कार्यक्रम को करना चाहता हूं लेकिन उसके बाद ही यह वास्तविक रूप प्रदर्शित करेगा।

इसके लिए मुझे प्रोग्राम के कार्यक्रम और पृष्ठभूमि को थ्रेड करने की आवश्यकता है। क्या कोई मुझे पूरी तरह से मदद कर सकता है?

उत्तर

8

OnShow ईवेंट के बाद तक किसी भी धागे का उपयोग किए बिना, आपके तर्क को देरी करना आसान हो सकता है। उदाहरण के लिए:

const UINT WM_DO_WORK = WM_USER + 1; 

void __fastcall TForm1::FormShow(TObject *Sender) 
{ 
    PostMessage(Handle, WM_DO_WORK, 0, 0); 
} 

void __fastcall TForm1::WndProc(TMessage &Message) 
{ 
    if (Message.Msg == WM_DO_WORK) 
    { 
     // do work here ... 
    } 
    else 
     TForm::WndProc(Message); 
} 

तुम सच में कोड थ्रेड करना चाहते हैं, तो आप इसे इस तरह कर सकते हैं:

class TMyThread : public TThread 
{ 
protected: 
    virtual void __fastcall Execute(); 
public: 
    __fastcall TMyThread(); 
}; 

__fastcall TMyThread::TMyThread() 
    : TThread(true) 
{ 
    FreeOnTerminate = true; 
    // setup other thread parameters as needed... 
} 

void __fastcall TMyThread::Execute() 
{ 
    // do work here ... 
    // if you need to access the UI controls, 
    // use the TThread::Synchornize() method for that 
} 

void __fastcall TForm1::FormShow(TObject *Sender) 
{ 
    TMyThread *thrd = new TMyThread(); 
    thrd->OnTerminate = &ThreadTerminated; 
    thrd->Resume(); 
} 

void __fastcall TForm1::ThreadTerminated(TObject *Sender) 
{ 
    // thread is finished with its work ... 
} 
संबंधित मुद्दे