我正在用 c++ 编写一个图形用户界面程序,我需要在程序中创建一个线程。所以我使用System::Threading
命名空间来实现我的目标。
我想用作线程的函数是一个类成员函数,所以这就是我所做的:
Server::Server() // constructor
{
System::Threading::Thread^ T = gcnew System::Threading::Thread(gcnew System::Threading::ThreadStart(this, this->RunServer)); // Server::RunServer
T->Start();
}
因为它给了我这些错误:
错误 2 错误 C3350:“System::Threading::ThreadStart”:委托构造函数需要 2 个参数
错误 1 错误 C3867: 'Server::RunServer': 函数调用缺少参数列表;使用 '&Server::RunServer' 创建指向成员的指针
我试过这个电话:
Server::Server() // constructor
{
System::Threading::Thread^ T = gcnew System::Threading::Thread(gcnew System::Threading::ThreadStart(&Server::RunServer));
T->Start();
}
并收到此错误:
错误 1 错误 C3364:“System::Threading::ThreadStart”:委托构造函数的参数无效;委托目标需要是指向成员函数的指针
2 IntelliSense:无效的委托初始化程序——函数不是托管类的成员
据我所知,第二次尝试没有成功,因为Server::RunServer
没有地址,所以就像这样做&1
。
顺便说一句,我尝试使用ThreadStart
to create thread of none class memeber 函数,它工作正常。
我正在使用 win7 - visual studio 2012。如何使它工作?
编辑:服务器声明:
class Server
{
public:
/* Fields */
std::string Port;
std::string Host;
WSADATA wsaData;
int ListenResult;
SOCKET ListenSocket;
SOCKET* ClientSocket;
SOCKADDR_IN* ADDR;
int ADDRSize;
struct addrinfo *result;
struct addrinfo hints;
std::vector<Client> Clients;
/* Methods */
Server();
std::wstring StringW(char* String);
void Print(std::wstring String);
std::wstring CurrentTime();
void ParseServerIni();
void RunServer();
void PartToString(Part* _Part);
void InsertListItem(std::string String);
void ClientHandler(SOCKET* _Sock, SOCKADDR_IN* _ADDR);
int ParsePacket(Packet &_Packet, int _Bytes, Byte** _PacketBlock);
};