小编Kri*_*son的帖子

分析多线程程序

我们有几年的代码库,所有原始开发人员早已不复存在.它使用许多线程,但没有明显的设计或通用的架构原则.每个开发者有自己的多线程编程的风格,使某些线程使用队列互相通信,与互斥锁的一些数据,一些锁旗语,对过程内的通信部分使用操作系统IPC机制.没有设计文档,评论很少.这是一个烂摊子,它似乎是,每当我们试图重构代码,或增加新的功能,我们引入死锁或其他问题.

那么,有没有人知道任何有助于分析和记录线程之间所有交互的工具或技术?FWIW,代码库是Linux上的C++,但我很想知道其他环境的工具.


更新

我很欣赏到目前为止收到的回复,但我希望得到一些更复杂或更系统的东西,而不是基本上是"添加日志消息,弄清楚发生了什么,并修复它"的建议.有许多工具可用于分析和记录单线程程序中的控制流程; 没有什么可用于多线程程序?


另请参阅调试多线程应用程序

concurrency multithreading

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

移动用户的最佳维基

大多数wiki软件我在他们的页面上提供了很多"功能".这对桌面用户来说很好,但在使用iPhone或其他移动设备时很烦人.

我更喜欢只有内容的页面,可能还有编辑按钮和搜索按钮.对于移动用户来说,编辑也常常太喜欢; 对于移动用户而言,简单的多行编辑字段比一堆格式化控件更好.

什么是移动用户的好wiki包?

iphone wiki mobile-website

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

MobileMe SDK/API文档

在搜索网络时,我发现许多引用"MobileMe API"(或.Mac API)用于与MobileMe同步数据,但我找不到任何权威文档,即使在Apple的网站上也是如此.

有谁知道它在哪里或如何得到它?

iphone macos mobileme

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

.NET中的分布式共享内存

是否存在用.NET实现的分布式共享内存系统的现有库/框架/产品,或者可以从.NET客户端轻松访问?

谷歌搜索提供了一些学术论文的链接,但我找不到任何真正的实现.

注意:我最感兴趣的是在局域网上运行的东西,而不是"云".

.net distributed shared-memory

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

如何将旧的ATL DLL项目添加"ATL简单对象"升级到VS 2010?

我们有一个DLL项目,它已经存在很长时间了(可能早在Visual Studio 6中),它已针对每个新版本的VS进行了更新.该项目包含使用ATL实现的多个COM类.

升级到VS 2010后,该项目仍然很好.但是,如果我尝试右键单击该项目并选择Add - > Class ... - > ATL Simple Object,我会得到一个错误框,上面写着:

ATL类只能添加到MFC EXE和MFC常规DLL项目或具有完全ATL支持的项目.

这在VS 2008中有效.

当我查看项目属性时,使用MFC设置为使用标准Windows库,并且使用ATL设置为不使用ATL.我将这些更改为分别在共享DLL动态链接中使用MFC,但仍然得到相同的错误.

我知道如何在不使用向导的情况下添加新的ATL对象,我可以尝试使用VS 2010从头开始重新创建项目以使其快乐.但有没有人知道任何简单的方法来让VS允许我使用ATL简单对象向导与一个项目,它不能识别为"具有完全ATL支持"的项目?

atl visual-studio-2010 visual-studio

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

修复debug.keystore以使用ADT 22和Google Maps v1 API Key

在将我的Android SDK更新到版本22.0.1并更新Eclipse ADT之后,我发现我无法再在设备上安装调试版本.控制台显示此错误:

Installation error: INSTALL_PARSE_FAILED_NO_CERTIFICATES
Run Code Online (Sandbox Code Playgroud)

我发现我可以通过删除我的debug.keystore文件并让SDK/ADT重新创建它来解决这个问题.这让我构建并安装一个调试包.

但是,该应用使用Google Maps v1 API,该API需要与签名绑定的API密钥debug.keystore.重新创建debug.keystore无效的API密钥,而Google 不再提供新的v1 API密钥.因此,当我运行调试版本时,地图视图为空白.

这不是一个showstopper,因为发布版本仍然可以正常工作.但有什么方法可以"修复"我的原始版本debug.keystore,使其适用于ADT 22并匹配我的Maps v1 API密钥?

FWIW,这是输出keytool -list -v -keystore debug.keystore -storepass android:

Keystore type: JKS
Keystore provider: SUN

Your keystore contains 1 entry

Alias name: androiddebugkey
Creation date: Feb 20, 2012
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=Android Debug, O=Android, C=US
Issuer: CN=Android Debug, O=Android, C=US
Serial number: 4f427735
Valid from: Mon Feb 20 …
Run Code Online (Sandbox Code Playgroud)

android keytool google-maps-android-api-1

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

为什么必须使用CALayer的presentationLayer进行命中测试?

我正在研究Cocoa Touch应用程序,并试图通过确定触摸视图层的哪个子层来处理触摸.我的控制器代码看起来像这样:

CALayer *hitLayer = [self.view.layer hitTest:point];
Run Code Online (Sandbox Code Playgroud)

这不起作用.如果我点击子层的底部,而不是顶部,它会起作用.经过一个小时的拉毛和谷歌搜索后,我终于发现,如果使用表示层进行命中测试而不是图层本身,它会起作用:

CALayer *hitLayer = [self.view.layer.presentationLayer hitTest:point];
Run Code Online (Sandbox Code Playgroud)

所以,我已经解决了我的问题,但我的问题是:为什么?

我已经阅读了核心动画指南,我知道表示树和渲染树可以与对象模型树不同.但我不明白为什么表示树(显然)会有不同的命中测试行为.表示树和对象模型不会具有相同的帧,边界等吗?

cocoa cocoa-touch core-animation calayer

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

添加到窗口后自动调整UIView大小

注意:这可能是添加到根视图控制器时Subview不自动调整大小的副本


我有一个iPad应用程序在其主窗口中切换不同的视图.视图切换代码如下所示:

- (void)switchToViewController:(UIViewController*)viewController {
    if (currentViewController != viewController) {
        [currentViewController.view removeFromSuperview];
        currentViewController = viewController;
        [window addSubview:viewController.view];
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是当新视图(UISplitView)以横向方向显示时,其大小不足以填充整个窗口.右边有一个空的黑色大空间.看起来视图只有768像素宽,而不是景观窗口的1024像素宽度.

如果我将设备旋转为纵向然后返回横向,则视图会自行调整大小.

如果设备处于纵向,一切正常.如果它是我展示的第一个视图,UISplitView也会正确调整大小.如果我在横向显示另一个视图后切换到它,则只会出现此问题.

那么,是否有某种方法可以强制iPhone OS在将视图添加到窗口后调整视图大小?

我已经打过电话sizeToFit,和setNeedsLayout.我也尝试将视图设置为bounds窗口bounds,我尝试将其设置frame为匹配上一个视图的帧.

iphone uiview uiwindow ipad

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

正在寻找TiddlyWiki插件的文档

我想写一些关于TiddlyWiki插件的想法.但是,我一直无法找到"TiddlyWiki插件API"的任何参考信息(似乎没有正式定义).

这样的文档是否存在,或者我只需要查看TiddlyWiki源代码和一些示例插件?

javascript tiddlywiki

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

如何从终端检测 FileHandle.standardInput 的文件结尾

我有一个雨燕程序,它读出FileHandle.standardInput(在Objective-C,这将是+[NSFileHandle fileHandleWithStandardInput],当它击中的输入流档案结尾应该终止阅读,但是当我运行它使用终端(在MacOS塞拉利昂)作为输入,当我按 Ctrl+D 时它不会检测到文件结尾。

这是我正在做的事情的一个简化示例。这个程序简单地从标准输入读取并将它读取的内容写入标准输出:

#!/usr/bin/swift

import Foundation

let input = FileHandle.standardInput
let output = FileHandle.standardOutput

let bufferSize = 1024

var data = input.readData(ofLength: bufferSize)
while data.count > 0 {
    output.write(data)
    data = output.readData(ofLength: bufferSize)
}
Run Code Online (Sandbox Code Playgroud)

我希望在到达文件末尾时readData(ofLength:)返回一个为零的Data对象count

当我使用重定向到标准输入的文件运行时,如下所示:

./echo.swift < foo.txt
Run Code Online (Sandbox Code Playgroud)

它写出文件并终止。

但是,如果我像这样运行它:

./echo.swift
Run Code Online (Sandbox Code Playgroud)

然后键入一些文本并按 Ctrl+D,我希望它将 Ctrl+D 视为文件结尾并终止。但它不会那样做。它只是不断地运行和呼应线条。如果我一遍又一遍地按 Ctrl+D,它最终会终止,但这不是我想要的。

改变bufferSize似乎没有帮助。如果我将其设置为1.

我怀疑我需要在stdin文件描述符或终端设备上设置某种缓冲参数,或者捕获信号或其他东西,但我不知道是什么。

我知道我可以改用 C stdio fread()API,它可以从终端正确检测文件结束条件,或者我可以使用 SwiftreadLine(_:)从标准输入中读取,而不必担心文件句柄/描述符,但我想知道是否有一种方法可以使用FileHandle原始文件描述符或原始文件描述符来执行此操作,而无需重新实现 C stdio。


更新:在花了一个小时查看 …

nsfilehandle swift

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