小编zmi*_*pie的帖子

互斥锁:"阻塞"是什么意思?

我一直在阅读多线程和共享资源访问,其中一个(对我而言)新概念是互斥锁.我似乎无法找到的是发现"临界区"被锁定的线程实际发生的情况.它说在许多地方线程被"阻止",但这意味着什么?是否暂停,锁定解除后会恢复吗?或者它会在"运行循环"的下一次迭代中再次尝试?

我问的原因是因为我想要系统提供的事件(鼠标,键盘等),它们(显然)在主线程上传递,在我的辅助线程的运行循环中的一个非常特定的部分处理.因此无论发生什么事件,我都会在自己的数据结构中排队.显然,数据结构需要一个互斥锁,因为它被两个线程修改.缺少的难题是:当事件在主线程上的函数中传递时会发生什么,我想将其排队,但是队列被锁定了?主线程是否会被暂停,还是会跳过锁定的部分并超出范围(丢失事件)?

multithreading mutex locking thread-safety blocking

17
推荐指数
3
解决办法
2万
查看次数

iOS上的GL_TRIANGLES或GL_TRIANGLE_STRIP?

本文档(Apple的OpenGL iOS文档)中,Apple建议在iOS上的OpenGL ES中使用三角形条带(索引)三角形:

为了获得最佳性能,您的模型应使用glDrawArrays作为单个无索引三角形条提交,并尽可能少复制顶点.

然而,Imagination Technologies公司(该公司在iOS设备中使用的图形芯片的创造者)提出的另一种方式圆这个文件(POWERVR 3D应用开发建议书).他们专门写在第11页:

使用索引三角形列表比使用条带更有效.

我的问题:谁是对的?或者我误解了这两个文件?

iphone opengl-es ipad ios

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

平板时iPad设备的方向总是错误的

我知道这个主题在SO上引起了很多关注,但没有一个"解决方案"对我有用.情况如下:

  1. iPad在我的桌面上是平的(面朝上的设备方向),主屏幕是完全可读的,但主页按钮在顶部.所以这有效地显示了"Portrait Up Side Down" 界面方向.

  2. 我开始我的应用程序

  3. 该应用程序调用beginGeneratingDeviceOrientationNotifications以确保加速计正在工作,并且方向通知进入.

  4. 在启动时,我的应用程序会查询"界面方向"和"设备方向".结果是:

     STARTUP ORIENTATION:
         INTERFACE ORIENTATION: UIInterfaceOrientationPortrait
         DEVICE ORIENTATION: UIDeviceOrientationFaceUp
    
    Run Code Online (Sandbox Code Playgroud)

    Apple文档说每个应用程序(界面?)都是纵向开始的,所以这很有意义.设备方向也是正确的,因为这确实是正面朝上的.

  5. 发布后,第一个方向通知即将进入:

    NOTIFICATION 1: 
        INTERFACE: UIInterfaceOrientationPortrait   
        DEVICE: UIDeviceOrientationPortrait
    
    Run Code Online (Sandbox Code Playgroud)

    再一次,界面的肖像(这与我期望的相反,主屏幕显示自己向上朝下的方向),该设备也被称为纵向(不是这样,但这是显而易见的一个聪明的方案,以解决当设备面朝上或朝下时如何定位应用程序的内容).

  6. 正如许多人提到的那样,另一个(只有一个,而不是两个)方向通知如下:

    NOTIFICATION 2: 
        INTERFACE: UIInterfaceOrientationPortrait   
        DEVICE: UIDeviceOrientationFaceUp
    
    Run Code Online (Sandbox Code Playgroud)

    接口仍然是纵向(而不是正面向下),并且设备面朝上(这是正确的).

我的应用程序正确调整自己,并显示在一边,这是完全错误的.

我该怎么做才能知道上一个已知的方向,主屏幕和iPad上的其他用户界面显示的方向?

这是一个只有窗口和视图的OpenGL应用程序.我已经在混合中添加了一个UIViewController来查看它是否提供了更准确的信息,但它只是相同而且错误.我知道我并不是唯一一个在这方面苦苦挣扎的开发者,因为我在iPad上的许多应用程序也做错了,你必须倾斜设备才能使它们正确定位.但有些应用确实似乎对了,秘诀是什么?

launch ipad device-orientation

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

如何避免iOS二进制文件中的符号和源路径?

当我编译我的iOS应用程序的发布版本(基于标准的Apple提供的iOS应用程序模板)时,查看生成的可执行二进制文件,我看到各种符号甚至本地cpp源文件和标题路径.我真的很难过为什么会这样(我没有启用RTTI*).特别是源文件路径让我感到不舒服在全球范围内发送这个应用程序(为什么每个人都能看到我的开发机器的目录布局?).

这是两个(随机选择,主持)摘录:

TS/../ACTORS/CActorCanvasCharPart.cpplastMeshcapVerticesOFF BOUNDSupload VERTICES: %d 20CActorCanvasCharPartgrassscrub/Volumes/Data/iOS_projects/code/MyAppName_proj/MyAppName/source/STATES/GAMES/2/CStateGame2_grass.cppbaseShadowmowerstartmowerloopmowermowerCharcutGrassChargrassStuffgrassParticles/Volumes/Data/iOS_projects/code/MyAppName_proj/MyAppName/source/STATES/GAMES/2/CStateGame2_grass.h17CStateGame2_grasssinwriteStroke/Volumes/Data/iOS_projects/code/MyAppName_proj/MyAppName/source/STATES/GAMES/2/CStateGame2_flowers.hflowerBedsandTrailclickstart3inplace2sandDrag/Volumes/Data/iOS_projects/code/MyAppName_proj/MyAppName/source/STATES/GAMES/2/CStateGame

以下是自定义类型和结构的许多符号:

CAssetMgr="_vptr$CMgrBase"^^?"pMain"^{CMain}"inited"B"curveCount"S"curveSpecs"^{CCurveSpec}"gameSpecs"[23{CGameStateSpec="header"{SpecDiskHeader="type"i"version"S}"gameID"C"backgroundColor"{CRGBAcolorf="r"f"g"f"b"f"a"f}"clickPointColor"{CRGBAcolorf="r"f"g"f"b"f"a"f}"clickPointIconColor"{CRGBAcolorf="r"f"g"f"b"f"a"f}"hintColor"{CRGBAcolorf="r"f"g"f"b"f"a"f}}]"currentFont"^{CCharset}"userCharParts"^^{CCharPart}"words"{CDataSet<CName4,CCharArray>="_vptr$CObjectBase"^^?"pMain"^{CMain}"count"i"data"*"dataSize"l}"sets"{CDataSet<CName16,CCharArray>="_vptr$CObjectBase"^^?"pMain"^{CMain}"count"i"data"*"dataSize"l

这可以避免,怎么样?

*更新:我刚发现RTTI默认开启.所以我清理了目标,禁用了RTTI(GCC_ENABLE_CPP_RTTI = NO)并重新编译.我仍然在二进制文件中看到很多符号和源路径.

更新2:我从应用程序商店检查了一些其他应用程序,其中许多也显示了他们的源文件路径.非常可怕,如果你问我:

Joined Up Lite
/Users/lloydy/Documents/Development/iPhone/ABC Joined Up/main.m
/Users/lloydy/Documents/Development/iPhone/ABC Joined Up/Classes/SettingsView.m

Crayon Physics
/Users/smproot/Desktop/unzip/CrayonPhysics/v104/Classes/crayon/src/ceng/gameutils/killspriteslowly/killspriteslowly.cpp
/Users/smproot/Desktop/unzip/CrayonPhysics/v104/Classes/crayon/src/ceng/tasks/task/sdl/mixer/ctaskaudiosdlmixer.cpp

Wall Times
/Users/fred/_WORK/ZDNDRP/WallTimes/main.m
/Users/fred/_WORK/ZDNDRP/WallTimes/Classes/SystemCategories.m

Jumbo Calculator
/Users/Christopher/Documents/Development/JumboCalculator 1.0.3/main.m
/Users/Christopher/Documents/Development/JumboCalculator 1.0.3/Classes/CalculatorFaceViewController.m

c++ xcode symbols ios

8
推荐指数
3
解决办法
2613
查看次数

在ARM与Intel之间将浮动强制转换为unsigned char

当我在Intel机器上运行以下C代码时......

float f = -512;
unsigned char c;

while ( f < 513 )
{
    c = f;
    printf( "%f -> %d\n", f, c );
    f += 64;
}
Run Code Online (Sandbox Code Playgroud)

...输出如下:

-512.000000 -> 0
-448.000000 -> 64
-384.000000 -> 128
-320.000000 -> 192
-256.000000 -> 0
-192.000000 -> 64
-128.000000 -> 128
-64.000000 -> 192
0.000000 -> 0
64.000000 -> 64
128.000000 -> 128
192.000000 -> 192
256.000000 -> 0
320.000000 -> 64
384.000000 -> 128
448.000000 -> 192
512.000000 -> …
Run Code Online (Sandbox Code Playgroud)

iphone floating-point arm intel coercion

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