小编Xta*_*etl的帖子

使用自定义生成器扩展CMake?

如何为CMake添加对新IDE /构建系统的支持?它是否提供了一种机制来直接修改代码而不执行此操作?

cmake

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

boost :: any和模板

我正在写一个涉及大量模板技巧和boost :: any的库.我遇到了一个我基本上有这个的情况:

boost::any a1, a2, a3, a4;
Run Code Online (Sandbox Code Playgroud)

...我需要调用一个如下所示的函数:

template <typename A1, typename A2, typename A3, typename A4>
void somefunc (A1 a1, A2 a2, A3 a3, A4 a4);
Run Code Online (Sandbox Code Playgroud)

我可以使用一个淫秽嵌套的if语句系列,但假设我正在处理10种不同的类型,那就是10,000 if语句!Boost预处理器可以在这里提供帮助,但这仍然是一个可怕的解决方案.

有没有更好的方法用boost :: any的内容调用模板化函数而不诉诸这种疯狂?据我所知,没有.

c++ templates boost-any

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

在并发队列中使用dispatch_semaphore_t的死锁

我正在开发一个使用GCD运行大量后台作业的MacOS X应用程序.后台作业使用CLucene索引文档,并在子上下文中访问Core Data.

这些作业都是在短时间内生成的(在使用DISPATCH_QUEUE_CONCURRENT创建的队列上使用dispatch_async),但只有4个一次完成实际工作.这是使用dispatch_semaphore_t完成的,通过在作业开始时等待它并在作业完成时释放它来完成.

我在以下情况下看到一个非常奇怪,可靠的可重现的死锁:

  1. 后台作业仍在运行
  2. 用户将焦点切换到另一个应用程序,然后返回

NSWindow显然陷入僵局,试图在显示菜单栏时发送通知.这是发生这种情况时主线程的堆栈跟踪:


#0  0x00007fff870ae6c2 in semaphore_wait_trap ()
#1  0x00007fff8b1bf486 in _dispatch_semaphore_wait_slow ()
#2  0x00007fff8b69c12b in -[_NSDNXPCConnection sendMessage:waitForAck:] ()
#3  0x00007fff8b57ced5 in _CFXNotificationPost ()
#4  0x00007fff8b58bbf3 in CFNotificationCenterPostNotification ()
#5  0x00007fff902ae174 in HIS_XPC_CFNotificationCenterPostNotification ()
#6  0x00007fff8bd3612a in BroadcastToolboxMessage ()
#7  0x00007fff8bd6d063 in MenuBarInstance::Show(MenuBarAnimationStyle, unsigned char, unsigned char, unsigned char) ()
#8  0x00007fff8bd98144 in SetMenuBarObscured ()
#9  0x00007fff8bd97e0f in HIApplication::HandleActivated(OpaqueEventRef*, unsigned char, OpaqueWindowPtr*) ()
#10 0x00007fff8bd95407 in HIApplication::EventObserver(unsigned int, OpaqueEventRef*, void*) ()
#11 0x00007fff8bd636e0 in _NotifyEventLoopObservers …
Run Code Online (Sandbox Code Playgroud)

macos cocoa multithreading objective-c grand-central-dispatch

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