我在创建使用while循环的C ++应用程序时遇到了问题。
int checkIP(const char *IP)
{
WSAData version; //We need to check the version.
WORD mkword=MAKEWORD(2,2);
int what=WSAStartup(mkword,&version);
if(what!=0){
std::cout<<"This version is not supported! - \n"<<WSAGetLastError()<<std::endl;
}
else{
std::cout<<"Good - Everything fine!\n"<<std::endl;
}
SOCKET u_sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(u_sock==INVALID_SOCKET)
std::cout<<"Creating socket fail\n";
else
std::cout<<"It was okay to create the socket\n";
//Socket address information
sockaddr_in addr;
addr.sin_family=AF_INET;
addr.sin_addr.s_addr=inet_addr("192.168.0.90");
addr.sin_port=htons(80);
/*==========Addressing finished==========*/
//Now we connect
int conn=connect(u_sock,(SOCKADDR*)&addr,sizeof(addr));
return conn;
}
这是我检查ip的功能。 我想并行运行这个功能。像
void start(const char* ip)
{
while(checkIP == SOCKET_ERROR)
{
try to connect the ip...
}
}
在我的主程序中我想运行这个启动函数,但我不想等待这个启动函数的响应...我需要这个函数应该调用并且平行地完成它的工作并且该程序如同。 ..
int Ipcheck = checkIP("192.168.10.90");
if(Ipcheck == SOCKET_ERROR)
{
ofstream _Log;
_Log.open ("Log.txt",std::ios_base::app);
_Log << "Unable to connect to "<<IP<<endl;
_Log.close();
start();
BSTR bstrr = SysAllocString(L"Error");
return bstrr;
}
就像在这段代码中系统调用start函数但我希望它jst调用函数并反手做每一件事并且编译器继续下一个语句BSTR立即返回值... 请帮我这样做...对不起我的英语不好...请给出示例代码如何以反手或平行的方式运行while循环事件...
答案 0 :(得分:0)
要创建线程,请查看std :: thread
另请查看始终非常有用的文档 http://www.codeproject.com/Articles/540912/Cplusplus-Threads-Make-your-multitasking-life-e
通读本文,帮助您了解如何安全地创建线程,停止/避免数据争用和锁定线程。 在其他东西正在运行的时候,线程是很棒的东西,加速处理,在UI后面运行更新等等。
如果你还需要我在这里留言:) 杰克
答案 1 :(得分:0)
使用std::thread
可能是一种解决方案。不管你真正想要做的是异步运行你的函数:在你等待真正需要返回值之前,你调用函数并做其他事情。
为此,std::async
正是您所需要的!这里有一个关于这个主题的little tutorial。
示例1:功能,没有返回值
future<void> myvres = async(launch::async, start); // launch function
DoSomethingElse();
...
myvres.get(); // here, make sure that start() finished.
有趣的是,如果start()
会引发异常,那么就会延迟到你执行get()的那一刻。
示例2:具有返回值的函数
future<int> Ipcheck = async(launch::async, checkIP, "192.168.10.90");
DoSomethingElse();
...
if (Ipcheck.get() == SOCKET_ERROR)
...
但是,如果您正在寻找多线程,只是因为您不希望因套接字操作而延迟,那么thre是一个更简单的解决方案,即只是异步使用套接字。这里an example。