小编Juk*_*rpa的帖子

互斥锁是否按照它们被询问的顺序发生?

我目前正在尝试使用创建一个非常简单的线程池std::thread.为了在完成给定任务后保持线程"活着",我将a std::mutex与每个线程相关联.

原理有点像这样:

// Thread loop
while (1)
{
  m_oMutex->lock();
  m_oMutex->unlock();
  m_bAvailable = false;
  m_oTask();
  m_bAvailable = true;
}

// ThreadPool function which gives a task to a thread
void  runTask(boost::function<void ()> oTask)
{
  [...]
  m_oThreads[i]->setTask(oTask);
  m_oMutexes[i]->unlock(); // same mutex as thread's m_oMutex
  m_oMutexes[i]->lock();
}
Run Code Online (Sandbox Code Playgroud)

为了找到i时,ThreadPool与一个线程对象的搜索m_bAvailable设置为true.它解锁相应的互斥锁,以便thread锁定它并执行其任务.该thread立即将其解锁,因此ThreadPool能够使再次锁定它thread,一旦它的任务完成停止.

但问题是,是否按照线程要求的顺序进行锁定?换句话说,如果一个thread锁定a mutex,然后ThreadPool解锁它并再次锁定它,我确定锁将被赋予第thread一个?如果没有,有没有办法确保它?

c++ multithreading mutex

5
推荐指数
1
解决办法
2472
查看次数

使用基本矩阵来计算使用OpenCV的坐标转换

我试图计算两个图像之间几个点的坐标对应关系.我有一组其对应关系已知的点,我将它们用于OpenCV findFundamentalMatrix(),以便找到基本矩阵.我验证x^T * F * x' = (0)了每一点,结果总是正确或非常接近.

问题是,现在我想使用第一个图像(y)和基本矩阵(F)上的点的坐标,以便找到第二个图像(y')上的点的坐标.我首先想到的只是简单地使用上面的等式,但只给出了zy'一点,可以有无穷无尽的解决方案.

我怎样才能使用基本矩阵来计算翻译?

为了更清楚:知道基本矩阵"链接"两个投影,我如何使用它来转换(a, b, 1)从第一个投影到第二个投影的任何已知点的坐标?

考虑到我们知道a,b并且F在此方程式为:(A",B",1)Ť*F*(A,B,1)=(0)

我做了一个简单的绘图作为例子:http://i.imgur.com/drNr2.jpg.我们的想法是找到(xq, yq)投影2中红点的坐标,考虑到我们知道它在投影1中的坐标和两个投影中所有其他点的坐标(以及其他一些因为找到基本矩阵的算法实际需要在至少8分)

另一个精度:在我的例子中,已知点是共面的,但研究点不一定是.

我希望这让我的问题更清楚:)

c++ opencv linear-algebra computer-vision

5
推荐指数
1
解决办法
4823
查看次数

UINavigationController和UIViewController dealloc

我最近改变了我的应用程序以使用UINavigationController,之前我使用的是UINavigationBar,使用级联子视图添加,这有点脆弱.

我正面临内存使用问题.泄漏工具没有显示任何泄漏,但我创建并添加到UINavigationController的ViewControllers似乎永远不会被释放.因此,每当我创建一个新的VC然后按下NavigationController的后退按钮时,内存使用量就会增加.

我只需这样创建并添加我的VC:

DetailViewController* detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
// setups
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController release];
Run Code Online (Sandbox Code Playgroud)

该应用程序永远不会通过ViewController deallocviewDidUnload方法.每次按下后退按钮时,不应该调用这些吗?

我搜索了许多教程并阅读了Apple的内存管理,但是在使用NavigationController时,VC的内存生命周期并不存在.

memory iphone uiviewcontroller uinavigationcontroller dealloc

3
推荐指数
1
解决办法
4116
查看次数

Visual Studio sizeof非法操作数

我目前正在将一个在Linux上开发的程序移植到Win32.在其他问题中,我有一个非常奇怪的问题.头文件包含以下内容:

namespace Networking {
  struct  MetaStruct
  {
    int   iDataType;
    int   iDataSize;
    void* pData;
  };

  const int MetaStructSize = sizeof(MetaStruct) - sizeof(MetaStruct::pData);
};
Run Code Online (Sandbox Code Playgroud)

这在Linux上编译很好,但是在使用VS2010编译Win32时遇到了这个错误: Networking.hpp(50): error C2070: '': illegal sizeof operand

我尝试添加Networking::之前MetaStruct但它没有改变任何东西.奇怪的是VS2010给了我正确的值,sizeof当我用鼠标悬停它,但不会编译它.为什么?

c++ windows sizeof visual-studio visual-c++

3
推荐指数
1
解决办法
2597
查看次数

iPhone - 处理UIViewController中的触摸幻灯片

我想在UIViewController子类中处理触摸(特别是水平幻灯片),但问题是控制器的视图包含覆盖整个屏幕的UIScrollView,因此从不调用"touchesBegan:"和"touchesEnded:"事件在我的控制器中.scrollview只能垂直滚动.

什么是使它能够处理这些事件的最佳方法?让我的UIViewController也继承UIScrollView并根据需要处理触摸(并删除当前的滚动视图),或使用UIScrollView子类代替我当前的滚动视图,它将调用我需要的情况的委托方法?或许还有另一种方式?

这是我目前的代码:

// View creation and adding to parent
NewViewController* newViewController = [[newViewController alloc] initWithNibName:@"NewViewController" bundle:nil];
[self.view addSubview:newViewController.view];

// NewViewController.h
@interface NewViewController : UIViewController {
    IBOutlet UIScrollView*  scrollView;

    // other outlets and properties
}
- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event;
- (void)touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event;
Run Code Online (Sandbox Code Playgroud)

在IB中,NewViewController的视图包含scrollView,其中包含所有其他插座(标签,按钮)......目标是让NewViewController的scrollView调用NewViewController的touchesBegan和touchesEnded方法.

更新: ScrollViewSuite帮助我理解了如何处理触摸回调.UIScrollView只有在触摸不能滚动时才调用它们.

那么,有三种情况:

  • 倾斜滑动(一旦滚动条出现,即使稍微滑动):不touches调用任何方法
  • 完美的横向滑动(未出现滚动条)touchesBegan,touchesMovedtouchesEnded被称为
  • 任何触摸不引起随后稍微上下滑动的滚动(触摸不移动,或水平移动): touchesBegan,touchesMovedtouchesCancelled是调用;

可以通过设置UIScrollView's canCancelContentTouches来避免触摸取消,FALSE但这显然只有touchesBegan在被调用时才有效,这意味着第一种情况下仍然不会调用触摸方法.

但是UIScrollView有一个名为delaysContentTouches的属性TRUE,默认设置为,并且当触摸开始时它会等待一点,以便查看它是否会让他滚动.如果设置为FALSE,则触摸开始后立即调用touches方法,并允许子类按照自己的意愿处理它们. …

iphone cocoa-touch uiscrollview uiviewcontroller

2
推荐指数
1
解决办法
4502
查看次数

ASIHTTPRequest dealloc和EXC_BAD_ACCESS问题

我正在使用ASIHTTPRequest包装器(AsyncImageLoader)数组来下载UITableView中的单元格的图像.

我在处理ASIHTTPRequests生命周期时遇到问题.如果我发布它们,如果我在尝试加载图像时继续向上和向下滚动,我最终会有一个EXC_BAD_ACCESS.

这是我的包装器的样子.self.request有保留属性,targetCell是我要将图像放入的单元格:

@implementation AsyncImageLoader
- (void)loadImageFromURL:(NSString*)fileName target:(ResultTableViewCell*)targetCell {
    // check for cached images, etc

    NSURL* url = [NSURL URLWithString:fileName];
    [self.request cancel];
    self.request = [ASIHTTPRequest requestWithURL:url];
    self.request.delegate = self;
}

- (void)startLoading {
    [self.request startAsynchronous];
}

- (void)cancel {
    [self.request cancel];
    self.request = nil;
}

- (void)requestFinished:(ASIHTTPRequest*)requestDone {
    // cache image, set cell image...

    self.request = nil;
}

- (void)requestFailed:(ASIHTTPRequest*)requestDone {
    // handle answer as well

    self.request = nil;
}
@end
Run Code Online (Sandbox Code Playgroud)

loadImageFromURL被称为cellForRowAtIndexPathindexPath.row …

iphone exc-bad-access objective-c dealloc asihttprequest

2
推荐指数
1
解决办法
5664
查看次数

boost :: asio async_read不接收数据或不使用回调

我试图使用boost asio的async_read()自由函数从服务器应用程序接收数据,但是我从未调用接收时设置的回调.

客户端代码是这样的:

Client::Client()
{
  m_oIoService.run(); // member boost::asio::io_service
  m_pSocket = new boost::asio::ip::tcp::socket(m_oIoService);

  // Connection to the server
  [...]

  // First read
  boost::asio::async_read(*m_pSocket,
                          boost::asio::buffer((void*)&m_oData, sizeof(m_oData)),
                          boost::bind(&Client::handleReceivedData, this,
                                      boost::asio::placeholders::error,
                                      boost::asio::placeholders::bytes_transferred));
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用小数据(一个短小的字符串),我无法让它工作.当我使用同一个读取函数(boost::asio::read())使用两个相同的第一个参数时,一切都很完美.

我是否因使用io_service而遗漏了一些东西?我仍然不确定它是如何工作的.

c++ networking boost boost-asio

2
推荐指数
1
解决办法
2395
查看次数

FOSRestBundle,过滤 JSON 响应中的对象属性

我正在使用 FOSRestBundle 为 Symfony2 项目构建 API,并且经常简单地返回要以 JSON 编码的 Doctrine 对象。通常是这样的:

/**
 * @Rest\View()
 */
public function getEventsAction(Request $request)
{
  // security checks

  return $this->getDoctrine()->getRepository('SomeBundle:Event')->findAll();
}
Run Code Online (Sandbox Code Playgroud)

问题是,这会返回所有对象属性和关系,在很多情况下我不希望这样,例如包含哈希密码和所有内容的 User 对象。

在 JSON 中编码 Doctrine 对象时,有没有办法设置自动过滤器?或者我是否必须创建一个仅获取所需数据的 QueryBuilder?

php json symfony fosrestbundle

2
推荐指数
1
解决办法
2266
查看次数

Android ImageView根据标签设置图像

我想知道Android中是否有任何方法可以ImageView动态设置图像tag.

理想情况下会是这样的:

// image_view_style.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:tag="1"
        android:drawable="@drawable/image_for_tag_1"/>
  <item android:tag="2"
        android:drawable="@drawable/image_for_tag_2"/>
  <item android:tag="3"
        android:drawable="@drawable/image_for_tag_3"/>
</selector>
Run Code Online (Sandbox Code Playgroud)

而简单地调用ImageViewsetTag()与我想要的价值的方法.

我试过这个,但它不起作用.有没有干净的方式做在资源文件中的图像选择(的东西比别的state_selected,state_pressed等)?

android android-imageview android-resources

1
推荐指数
1
解决办法
1080
查看次数

使用 Tippecanoe 生成的 mbtile 中的坐标不正确

mbtiles使用 Tippecanoe 生成了一个文件,仅使用-zg--drop-densest-as-needed作为额外参数。我将文件上传到 Mapbox Studio,无论是在 Studio 中还是通过移动应用程序加载图块时,一切都运行良好。

然后我尝试使用 Go 中的一个非常基本的 HTTP 服务器来自托管这些图块。图块从 SQLite 转移到 PostgreSQL 数据库(原因是 Go + PSQL 是应用程序的现有堆栈)。

由于某种原因,这些功能会根据缩放级别而变化。在级别 1 上,本应位于美国的数据位于南极洲,在缩放级别 2 上,数据位于智利海岸附近,等等。唯一正常工作的是级别 0,因为只有一个图块。

我检查了在旧金山缩放级别 11 时 Mapbox 请求的图块:第 327 列,第 791 行。文件中不存在此行/列组合的图块,.mbtiles尽管那里有数据。

除了使用 z/x/y 在数据库中查找 mbtile 之外,还需要对它们执行其他操作吗?或者也许需要在应用程序端配置一些东西?

服务器代码:

row := db.QueryRow(`
    SELECT tile_data FROM tiles
    WHERE
        zoom_level = $1
        AND tile_column = $2
        AND tile_row = $3
    `,
    z, x, y,
)
Run Code Online (Sandbox Code Playgroud)

在安卓上:

map.addSource(
        VectorSource(
                "tiles",
                TileSet("2.2.0", "http://my.local.server:4000/tiles/{z}/{x}/{y}.mvt?key=2448A697EACDDC41432AAD9A1833E")
        ) …
Run Code Online (Sandbox Code Playgroud)

mapbox mbtiles tippecanoe

1
推荐指数
1
解决办法
1462
查看次数