【发布时间】:2011-12-07 18:26:05
【问题描述】:
我在 iOS 上将 c++ vars 与 obj-c 异步代码粘合在一起时遇到问题。
真正的问题在于异步代码,我使用的是 C++ 中构建的第三方库,需要对象引用,例如:
- (void) processFrame:(cv::Mat &)mat;
我的问题真正的问题是如何调用它?我需要在不同的线程上创建 c++ 对象并将其传递给异步代码,有点像这样:
__block cv::Mat mat(videoRect.size.height, videoRect.size.width, CV_8UC4, baseaddress, 0);
dispatch_async(dispatch_get_main_queue(), ^{
[self processFrame:mat];
});
这给出了一个错误(Bad access),问题是(我猜)对象在方法运行之前就被销毁了,所以我尝试在堆中创建对象:
__block cv::Mat *mat= new cv::Mat(videoRect.size.height, videoRect.size.width, CV_8UC4, baseaddress, 0);
dispatch_async(dispatch_get_main_queue(), ^{
[self processFrame:(*mat)];
});
还是这样:
__block cv::Mat *mat= new cv::Mat(videoRect.size.height, videoRect.size.width, CV_8UC4, baseaddress, 0);
dispatch_async(dispatch_get_main_queue(), ^{
[self processFrame:mat];
});
我总是遇到“Bad access”错误
有什么想法吗?
【问题讨论】:
标签: c++ objective-c asynchronous pass-by-reference objective-c-blocks