我目前正在研究我的高级项目,并且该项目几乎完成,但是我需要在不支持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