我目前正在研究我的高級項目,並且該項目幾乎完成,但是我需要在不支持C++ 11的VisualStudio 2010中實現多線程。因此,我將此用作多線程源(由我的教師建議)http://msdn.microsoft.com/en-us/library/windows/desktop/ms682516(v=vs.85).aspx,我完全喪失瞭如何使用SOCKET實現這一點。C++線程化,它需要一個SOCKET參數
我的問題是我怎樣才能使用我已經編碼的套接字與多線程。以下是我到目前爲止。
typedef struct SenderData {
SOCKET socConnection;
} SENDERDATA, *PSENDERDATA;
DWORD WINAPI SenderThreadFunction(LPVOID lpParam){
HANDLE hStdout;
PSENDERDATA pDataArray;
TCHAR msgBuf[BUF_SIZE];
size_t cchStringSize;
DWORD dwChars;
// Make sure there is a console to receive output results.
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
if(hStdout == INVALID_HANDLE_VALUE)
return 1;
// Cast the parameter to the correct data type.
// The pointer is known to be valid because
// it was checked for NULL before the thread was created.
pDataArray = (PSENDERDATA)lpParam;
return 0;
}
該函數的所有命令在telnet來啓動一個會話,並從文件
DWORD WINAPI Sender(LPVOID lpParam){
}
下創建的連接,這是我最初有在main(),但我不能確定發送郵件在哪裏,如果我沒有使用線程
012現在把它WSADATA wsaData; // Creates wsaData object
WSAStartup(MAKEWORD(2, 2), &wsaData); //Initializes Winsock
//Creates the socket object named "soc(Connection"
SOCKET socConnection = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
SOCKADDR_IN Addr;
HOSTENT* Host = gethostbyname("smtp.com");
Addr.sin_addr.s_addr = inet_addr(inet_ntoa(*(in_addr*)Host->h_addr_list[0]));
Addr.sin_family = AF_INET;
Addr.sin_port = htons(25);
這將在main()被調用
在main()中執行以下代碼時,我將如何放置以前的代碼以啓動? 我在C++上非常新,我非常感謝任何幫助。先謝謝你。
hThreadArray[0] = CreateThread(
NULL, // default security attributes
0, // use default stack size
Sender, // thread function name
pDataArray[0], // argument to thread function
0, // use default creation flags
&dwThreadIdArray[0]); // returns the thread identifier
什麼是實際問題,你是具有? –
@RemyLebeau我不知道如何在Sender線程中調用connect函數,同時也創建了Connection。基本上有一種方法可以調用發件人功能,它會創建連接併發送數據? – EAZYEASTON
在我看來,C++ 11不會讓你的任務變得更簡單,VS2010也有一些C++ 11的特性。你的問題是多線程相關的,學習多線程不是幾小時或幾天的過程,特別是在C/C++中。你鏈接的例子也是一個不是C++的例子。正確的C++實現會將線程封裝到線程類中,使事情變得更容易。 – pasztorpisti