在C++控制台应用程序中运行两个线程
Run Two thread in C++ console Application
我在创建使用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 failn";
else
std::cout<<"It was okay to create the socketn";
//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循环事件。。。
要创建线程,请查看std::thread
还要看那些总是非常有用的文档http://www.codeproject.com/Articles/540912/Cplusplus-Threads-Make-your-multitasking-life-e
阅读本文,帮助您了解如何安全地创建线程、停止/避免数据争用和锁定线程。线程是很棒的东西,可以加快处理速度,在UI后面运行更新等,而其他东西正在运行。
如果你需要在这里给我留言:)Jake
使用std::thread
可能是一种解决方案。然而,您真正想做的是异步运行您的函数:您调用函数并在等待真正需要返回值时执行其他操作。
为此,std::async
正是您所需要的!这里有一个关于这个主题的小教程。
示例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是一个简单得多的解决方案,即只异步使用套接字。这里是一个例子。
相关文章:
- 在两个线程上读/写 64 位,无互斥/锁定/原子
- 如果两个线程相互依赖,则 cpp 线程连接应使用连接导致死锁
- 两个线程一个使用流 Api,另一个线程创建文件失败并出现错误ERROR_SHARING_VIOLATION
- 简单使用 std::atomic 在两个线程之间共享数据
- 如何使用 pthreads 以正确的方式设置两个线程之一的优先级
- 曼德布洛特 从一个线程被反复使用变为两个线程
- C++ 两个线程,共享几个整数变量
- 如何正确同步这两个线程?
- 两个线程尝试将一些数据读/写到数据库中表的同一行中
- 两个线程的公共资源 - 同步足够吗?
- 如果两个线程调用同一个函数,但函数中的所有变量都是局部变量,我还需要担心线程之间共享数据吗?
- 当两个线程同时尝试在同一静音上尝试try_lock()时会发生什么
- C 带有两个线程的boost async_read vs
- 使用 Poco:Condition 唤醒两个线程
- C 两个线程一个用于输入,一个用于输出
- 将两个线程同步到同一个计时器
- 全局变量的最终值,该变量正在通过两个线程进行增量
- C++中两个线程的互斥体
- Qthread char阵列在两个线程之间传递后被摧毁
- 如何使用CPP中使用一个对象运行同一类的两个线程