CSocket und Threads oder CAsyncSocket
-
Welche Vor- und Nachteile gibt es dabei?
-
CSocket && Thread != CAsyncSocket!
Stichpunkt, abbrechen von Übertragungen! Das funktioniert nur bei CAsyncSocket. Der Thread bricht erst ab, wenn CSocket komplett übertragen hat.
-
Ist also CAsyncSocket immer besser als CSocket && Thread ?
-
und wie löse ich in einem CAsyncSocket das Problem mit dem Zugriff auf einen CDialog?
-
Ist also CAsyncSocket immer besser als CSocket && Thread ?
Da könntest Du auch fragen:
"Ist ein Mass Bier immer besser als 5x0.2l-Gläser?A: Es gibt für beides Einsatzmöglichkeiten!
und wie löse ich in einem CAsyncSocket das Problem mit dem Zugriff auf einen CDialog?
Ich wusste nicht, dass das jemals ein Problem war.
-
doch, oder ich mach was falsch: meine Klasse ist von CAsyncSocket abgeleitet. In ihrem ctor wird ein CDialog* erstellt. In OnReceive rufe ich dann Memberfunktionen von dem Dialogobjekt auf, die Membervarialblenwerte des Dialogobjekts auslesen. Vor dem Auslesen mache ich aber noch ein ASSERT_VALID(m_pDlg);. Dabei kommt ne Assertion Failed.
-
??? CODE ???
-
class CSMTPConnection : public CAsyncSocket { public: virtual BOOL OnSendProgress(DWORD dwCurrentBytes, DWORD dwTotalBytes) =0; protected: void OnReceive(int nErrorCode); }; class CMailSender : public CSMTPConnection { public: CMailSender(CMyDoc* pDoc); virtual BOOL OnSendProgress(DWORD dwCurrentBytes, DWORD dwTotalBytes); protected: CMyDoc* m_pDoc; CProgressDialog* m_pDlg; }; void CSMTPConnection::OnReceive(int nErrorCode) { //.... OnSendProgress(...); //... } CMailSender::CMailSender(CMyDoc* pDoc) : m_pDoc(pDoc) { ASSERT_VALID(m_pDoc); CProgressDialog* m_pDlg = new CProgressDialog; m_pDlg->Create(IDD_PROGRESSDIALOG); m_pDlg->ShowWindow(SW_SHOW); } BOOL CMailSender::OnSendProgress(DWORD dwCurrentBytes, DWORD dwTotalBytes) { // ein Zugriff auf m_pDoc gibt keinen Fehler! ASSERT_VALID(m_pDlg); // PENG! m_pDlg->m_ctlCurrentMailProgress.SetPos((100*dwCurrentBytes)/dwTotalBytes); return !m_pDlg->AbortFlag(); // fortfahren? }
-
-
CMailSender::CMailSender(CMyDoc* pDoc) : m_pDoc(pDoc) { ASSERT_VALID(m_pDoc); CProgressDialog* m_pDlg = new CProgressDialog; m_pDlg->Create(IDD_PROGRESSDIALOG); m_pDlg->ShowWindow(SW_SHOW); }
NNNNEEEEEEIIIIIIINNNNNN
So geht's:
CMailSender::CMailSender(CMyDoc* pDoc) : m_pDoc(pDoc) { ASSERT_VALID(m_pDoc); m_pDlg = new CProgressDialog; m_pDlg->Create(IDD_PROGRESSDIALOG); m_pDlg->ShowWindow(SW_SHOW); }
-
DANKE! Mann, bin ich doof! DANKEE!!!!!!!!