Ich bin neu in MFC CWinThread
und CAsyncSocket
, und versuchen, sie selbst mit dialogbasierter Anwendung zu lernen. Hier
ist das, was ich tun möchte:machen einen Server/Multi-Client-Modell: Wenn die Anzahl Clients mit dem Server verbinden, wird der Server-Threads machen nach der Anzahl der Clients und übergibt die Buchse an der Verbindungs Faden. Ich habe diesen Artikel um das Passing verwiesen: https://support.microsoft.com/en-us/kb/175668.
Ich habe erfolgreich Thread für jede Verbindung, aber ...
Meine Frage ist: Kann ich von den Hauptfenster (GUI) wieder Zugriff auf alle Steckdosen, die Fäden zu send bestanden, (Broadcast) Daten an alle Kunden?
Dies ist, wie ich das Passieren tun:
Auf Server-Seite:Zugriff auf einen Socket, der an Thread übergeben wurde
void CMyServerDlg::OnAccept(){
CConnectSoc temp_soc;
m_Listener.Accept(temp_soc);
CSocketThread *pThr = (CSocketThread*)AfxBeginThread(
RUNTIME_CLASS(CSocketThread),
THREAD_PRIORITY_NORMAL,
0,
CREATE_SUSPENDED);
pThr->threadHandleSocket = temp_soc.Detach();
pThr->ResumeThread();
}
Hinweis: m_Listener
ist das Objekt der Klasse, die aus CWinThread
abgeleitet von CAsyncSocket
und CSocketThread
abgeleitet wird.
Innerhalb des Themas Header hinzugefügt I 2 Zeilen:
Public:
CConnectSoc threadSocket;
SOCKET threadHandleSocket;
Innerhalb der Thread-Klasse CPP:
BOOL CSocketThread::InitInstance(){
threadSocket.Attach(threadHandleSocket);
return TRUE;
}
Kann mir jemand sagen, was als nächstes tun schicken Daten an diese Steckdose?
Po st Nachricht an den Thread mit [PostThreadMessage] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms644946%28v=vs.85%29.aspx). Um die Nachrichten von Threads an die Haupt-GUI zu posten verwenden Sie die normale 'PostMessage()' – cha
@cha Vielen Dank für Ihren Kommentar, ich habe eine Recherche und 'PostThreadMessage()' erfordern m_hthreadID. Also denke ich, wir müssen 'PostMessage()' aus dem Thread zuerst, um diese ID zu bekommen. Und speichern Sie sie in einem Array irgendwo für die Haupt-GUI kann eine Schleife von 'PostThreadMessage()' tun? ist das, was ich tun muss? –
'AfxBeginThread' gibt einen Zeiger auf ein 'CWinThread'-Objekt zurück, das eine Mitgliedsfunktion' PostThreadMessage' aufweist. Sie müssen nur den Zeiger speichern, der von 'AfxBeginThread' zurückgegeben wird. –