我正在编写一个跨平台的应用程序,我需要总的可用磁盘空间.对于posix系统(Linux和Macos),我使用的是statvfs.我创建了这个C++方法:
long OSSpecificPosix::getFreeDiskSpace(const char* absoluteFilePath) {
struct statvfs buf;
if (!statvfs(absoluteFilePath, &buf)) {
unsigned long blksize, blocks, freeblks, disk_size, used, free;
blksize = buf.f_bsize;
blocks = buf.f_blocks;
freeblks = buf.f_bfree;
disk_size = blocks*blksize;
free = freeblks*blksize;
used = disk_size - free;
return free;
}
else {
return -1;
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我得到了一些我无法理解的奇怪价值观.例如:f_blocks = 73242188 f_bsize = 1048576 f_bfree = 50393643 ...
这些值是以位,字节还是其他形式存在的?我在这里读的stackoverflow那些应该是字节,但后来我得到的总字节数是:f_bsize*f_bfree = 1048576*50393643但这意味着49212.542GB ......太多了......
我是否对代码或其他任何内容做错了?谢谢!
我发现自己处于必须调试Qt应用程序而几乎没有任何调试工具的困难情况下:应用程序似乎开始使用越来越多的CPU,因为它一次又一次地运行相同的操作; 几个小时后,CPU完全饱和.
该应用程序在ARM Linux嵌入式设备上运行,其中gdb似乎不起作用,可能很难发现所提供的工具链的问题.strace似乎只报告计时器活动(这是一个OpenGL应用程序所以这是预期的).ltrace不可用,编译它会导致一项艰巨的任务,也许是无用的.我没有编写应用程序,但源代码可用.
我还能做些什么来发现应用程序在消耗这么多资源时忙于做什么?我必须跟踪应用程序执行的所有方法调用吗?有没有其他技术可以用来猜测问题或在哪里集中注意力?
编辑:这是gdb的问题之一:gdb在ARM上报告的回溯中只有问号.即使编写模拟segfault的十行应用程序也会导致这种情况.
我知道在Android中实现的一些方法和一些类不会导出到Android公共SDK.我已经能够通过编译我的应用程序将其置于Android树中来创建一个使用其中一些功能的应用程序.是否可以通过从源代码重新编译将这些函数导出到Android SDK?如何才能做到这一点?我也可以在Android SDK中包含自定义类和函数(当然我假设我创建了一个新的SDK和一个新的固件)?谢谢!
我使用ALSA播放PCM样本.我用这个函数打开PCM流:
int snd_pcm_open(snd_pcm_t** pcmp,
const char* name,
snd_pcm_stream_t stream,
int mode);
Run Code Online (Sandbox Code Playgroud)
我目前正在使用"default"作为名称参数.我希望能够选择其他设备.我无法理解的是如何确定其他可用设备的名称.
我将USB麦克风连接到我的系统,aplay和amixer似乎检测到了新设备.如何确定该设备的名称?是否有任何ALSA功能可以获取具有各自名称的可用设备列表?
我读到应该可以使用像素缓冲区对象直接在 GPU 内存中传输像素数据。我不明白的是 OpenGL ES 2.0 是否支持 PBO。我发现了不连贯的信息。OpenGL ES 2.0 是否支持 PBO?
如果没有,OpenGL ES 2.0 是否还有其他方法可以将数据(RGBA32)直接放入纹理中?
我需要使用某种信号量来保护对互斥区域的访问,但是我需要这个区域来跨越多个线程.这是我在文档中找到的:
警告:NSLock类使用POSIX线程来实现其锁定行为.向NSLock对象发送解锁消息时,必须确保从发送初始锁定消息的同一线程发送消息.从其他线程解锁锁定可能导致未定义的行为.
我记得我读到这是一种防止编程错误的方法.这个陈述是否正确?我从文档中读到了线程指南,但我找不到任何其他允许从不同线程锁定和解锁的类.在Cocoa中有没有其他解决方案可以做到这一点?谢谢!
我编写了一个应用程序(在C ++中使用Qt),该应用程序将数据插入SQLite数据库。另一个应用程序从同一数据库读取数据,但是我注意到无法读取未提交的数据。我希望即使尚未提交数据也能够读取数据。
阅读SQLite文档后,我发现杂物read_uncommitted,据我所知应该是我所需要的。问题是,即使将其设置为true,也无法获得未提交的数据。
我试图运行执行插入过程的应用程序,同时启动sqlite3客户端。我将编译指示设置为true,然后尝试计算表中的记录。我得到的始终为0(在插入过程开始之前数据库为空),直到整个过程完成为止,我立即获得了所有数据。
难道我做错了什么?难道这不应该使sqlite3客户端的行为有所不同吗?
我有一个时间戳我想转换为日期.我试过这个时间戳:1336425840.这应该是周一,2012年5月7日21:24:00 GMT,其中GMT是模拟器应该设置的时区.我试过这个:
final Calendar c = Calendar.getInstance();
c.setTimeInMillis(1336425840*1000);
Date d = c.getTime();
Log.i("MyTag", "Hours: " + d.getHours());
Run Code Online (Sandbox Code Playgroud)
结果是:小时:23.
因此,似乎返回的日期是根据GMT + 2计算的,这是我的系统设置的时区.我期望g.hetHours()返回21,因为模拟器的时区似乎设置为GMT.
此外,该时间戳来自于使用mktime读取C中的实际日期,这似乎返回正确的时间戳.但Java似乎指的是不同的时区.我做错了吗?为什么不是周一,2012年5月7日21:24:00 GMT回归?
这两个功能有什么区别?我的理解是那些应该是相同的:http://www.gnu.org/software/libc/manual/html_node/Broken_002ddown-Time.html.
我编写了这段代码来测试转换(Qt部分仅用于比较):
#include <QCoreApplication>
#include <QDateTime>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QDateTime datetime(QDate(2012, 3, 25), QTime(5, 15));
qDebug("Timestamp: %lld.", datetime.toMSecsSinceEpoch()/1000L);
time_t timestamp;
tm* timeinfo = localtime(×tamp);
timeinfo->tm_hour = 5;
timeinfo->tm_mday = 25;
timeinfo->tm_min = 15;
timeinfo->tm_mon = 2;
timeinfo->tm_year = 112;
timeinfo->tm_sec = 0;
qDebug("Timestamp: %ld.", timelocal(timeinfo));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
并发现输出是:
Timestamp: 1332645300.
Timestamp: 1332645300.
Run Code Online (Sandbox Code Playgroud)
这是我所期待的.然后我换timelocal了mktime,发现这是输出:
Timestamp: 1332645300.
Timestamp: 1332648900.
Run Code Online (Sandbox Code Playgroud)
似乎增加了一个小时(考虑到我当前的时区是GMT + 2:00,我的语言环境设置为意大利).为什么?这两者有什么区别,为什么mktime在我设定的日期增加1小时?
编辑:我再次测试,似乎在Mac OS …
我正在阅读获取iOS开发人员证书的文档,但我发现很难理解它是如何工作的.
我正在为我的公司开发一些iOS应用程序,现在我需要在真实设备上部署.我知道我需要这个证书,但是即使在阅读文档之后我也不完全清楚:如果我获得了证书,我是否能够在单个特定设备上部署,或者使用我的证书,我将能够部署和测试我的公司会给我的任何设备?
另一个问题:这个证书只能在我的mac上使用,还是在我公司提供的任何mac上使用?我想我会用我的私人mac来工作,但是我的公司将来可能会分配另一个,所以这对我来说很重要.
另外第三个问题:文档引用了一个团队处理应用程序的情况,但不清楚是否有任何开发人员需要他的个人证书.多个开发人员可以在任何设备上使用相同的证书吗?
谢谢你的任何结算!
我正在使用检测分析Objective-C++代码中的泄漏,我得到了这个:
Leaked Object Address Size Responsible Library Responsible Frame
Malloc 32 Bytes,0x8135bc0 32 Bytes AudioToolbox SimAggregateDevice::SimAggregateDevice(__CFString const*, __CFString const*, long&)
__NSCFDictionary,0x8135be0 48 Bytes AudioToolbox CreateDictionaryForDevice(unsigned long)
Malloc 32 Bytes,0x8135c10 32 Bytes AudioToolbox CreateDictionaryForDevice(unsigned long)
Malloc 32 Bytes,0x8135c30 32 Bytes AudioToolbox CreateDictionaryForDevice(unsigned long)
Malloc 48 Bytes,0x8135c50 48 Bytes AudioToolbox SimAggregateDevice::SimAggregateDevice(__CFString const*, __CFString const*, long&)
__NSCFDictionary,0x813a820 48 Bytes AudioToolbox SimAggregateDevice::SimAggregateDevice(__CFString const*, __CFString const*, long&)
__NSCFArray,0x813a850 32 Bytes AudioToolbox SimAggregateDevice::SimAggregateDevice(__CFString const*, __CFString const*, long&)
__NSCFDictionary,0x813a870 48 Bytes AudioToolbox CreateDictionaryForDevice(unsigned long)
Malloc 32 Bytes,0x813a8a0 …Run Code Online (Sandbox Code Playgroud) 我有一个对象的方法,它创建对象,然后传递给另一个线程中的另一个对象的方法,如下所示:
MyClass* myClass = [[MyClass alloc] init];
[anotherClass performSelectorOnMainThread:@selector(method) withObject:myClass waitUntilDone:NO];
Run Code Online (Sandbox Code Playgroud)
在方法中,我立即保留该对象,假设它将以某种方式由创建者释放.我的问题是:如何让MyClass正确发布该对象?这是正确的方法吗?
我的解决方案是在方法中手动释放对象.无论如何,我看到泄漏分析仪仍然认为这是泄漏,似乎它不是Apple推荐的,因为所有者有责任释放对象.
你能解释一下处理这种情况的正确方法吗?谢谢!