作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我必须在 C++ 中使用线程在后台运行任务。实际上在代码中我必须使用 curl 发送多个 HTTP 请求并且我不想使用主线程运行因为它会阻塞主线程直到任务完成。因此,我希望每个 http 请求都应该是这样的:
a) 创建一个新线程 b) 在这个新线程上发送 curl req c) 一旦请求/响应完成,将响应/数据发送回主线程
在此过程中,我希望主线程空闲并运行其他一些它自己的任务。我是 C++ 和线程的新手,请告知如何实现这一目标。
最佳答案
如果您希望在工作线程完成后立即通知您的主线程,那么听起来您需要在主线程中有一个消息处理循环。
我只是认为这可以像 WinAPI 中的窗口过程一样实现。类似的东西。
cEvent event;
while( true )
{
event = GetNextEvent();
if( event.GetType() == APPQUIT )
{
break;
}
if( event.GetType() == SENDHHPTREQUEST )
{
// Create worker thread etc.
}
else if( event.GetType() == HTTPREQUESTCOMPLETED )
{
// Process HTTP request resuts.
}
...
}
工作线程需要一种方法将事件发送到主线程。当然,从消息队列中添加、删除事件必须是线程安全的,即受互斥锁保护。我想创建请求或处理请求结果所需的所有数据都需要以某种方式打包到 cEvent 中。
关于C++在辅助线程中运行任务并期望在主线程上得到响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13986876/
我是一名优秀的程序员,十分优秀!