小编Ben*_*ves的帖子

核心数据托管对象上下文线程同步

我有一个问题,我在后台线程中更新多对多关系,这在那个threa中运行正常,但是当我将对象发送回主线程时,更改不会显示.如果我关闭应用程序并重新打开数据保存正常,更改显示在主线程上.使用[context lock]而不是使用不同的托管对象上下文也可以正常工作.

我试过NSManagedObjectContext:

- (BOOL)save:(NSError **)error;
- (void)refreshObject:(NSManagedObject *)object mergeChanges:(BOOL)flag;    
Run Code Online (Sandbox Code Playgroud)

在整个过程的不同阶段,但它似乎没有帮助.

我的核心数据代码使用以下getter来确保任何操作都是线程安全的:

- (NSManagedObjectContext *) managedObjectContext 
{   

    NSThread * thisThread = [NSThread currentThread];
    if (thisThread == [NSThread mainThread]) 
    {
        //Main thread just return default context
        return managedObjectContext;
    }
    else 
    {
        //Thread safe trickery
        NSManagedObjectContext * threadManagedObjectContext = [[thisThread threadDictionary] objectForKey:CONTEXT_KEY]; 
        if (threadManagedObjectContext == nil)
        {
            threadManagedObjectContext = [[[NSManagedObjectContext alloc] init] autorelease];
            [threadManagedObjectContext setPersistentStoreCoordinator: [self persistentStoreCoordinator]];
            [[thisThread threadDictionary] setObject:threadManagedObjectContext forKey:CONTEXT_KEY];
        }

        return threadManagedObjectContext;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我在使用的线程之间传递对象时

-(NSManagedObject*)makeSafe:(NSManagedObject*)object
{
    if ([object managedObjectContext] …
Run Code Online (Sandbox Code Playgroud)

iphone core-data

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

将boost :: shared_lock升级为独占锁

有人可以解释一下boost :: upgrade_lock的正确用法.以下代码导致死锁

//Global
typedef boost::shared_mutex Mutex;
typedef boost::shared_lock<Mutex> ReadLock;
typedef boost::upgrade_lock<Mutex> UpgradeLock; 
typedef boost::upgrade_to_unique_lock<Mutex> WriteLock;
Mutex sharedMutex;


//Multi threaded reader and writer
{
    ReadLock read(sharedMutex);

    for (int ii = 0; ii < vec.size(); ++ii) {
        Element e = vec[ii];

        if (e.needsUpdating()) {
            UpgradeLock upgrade(sharedMutex);

            WriteLock write(upgrade)

            //Do stuff
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我在升级之前用read.unlock()解锁读锁,它不会死锁.但似乎这不应该是必要的吗?

c++ multithreading boost

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

多线程和自动释放池在Cocoa中一起工作吗?

我想从工作线程发送一个对象回到主线程.但是,自动释放池是否在线程之间工作?以下代码有什么问题:

-(void)mainThreadReceiveResult:(id)response
{
  [response retain];
    /* Do some stuff with response */
  [response release];
}


-(void)workerThreadDoWork
{

 NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

 response * response = [[[response alloc] init] autorelease];
 response->someData = [self getSomeData];

 [delegate performSelectorOnMainThread:@selector(receiveResult:) withObject:response waitUntilDone:NO];

 [pool release];    

}
Run Code Online (Sandbox Code Playgroud)

似乎工作正常.但是[pool release],在主线程能够保留之前,工作线程是否可以到达?

cocoa multithreading objective-c

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

Java 2D:将一个点P移动到一个距离更近的另一个点?

将Point2D.Double x距离移近另一个Point2D.Double的最佳方法是什么?

编辑:尝试编辑,但所以进行维护.不,这不是功课

我需要将一个平面(A)移向跑道(C)的末端并将其指向正确的方向(角度a).

alt text http://img246.imageshack.us/img246/9707/planec.png

这是我到目前为止所拥有的,但它看起来很混乱,通常的做法是什么?

    //coordinate = plane coordinate (Point2D.Double)
    //Distance = max distance the plane can travel in this frame

    Triangle triangle = new Triangle(coordinate, new Coordinate(coordinate.x, landingCoordinate.y),  landingCoordinate);

    double angle = 0;

    //Above to the left
    if (coordinate.x <= landingCoordinate.x && coordinate.y <= landingCoordinate.y)
    {
        angle = triangle.getAngleC();
        coordinate.rotate(angle, distance);
        angle = (Math.PI-angle);
    }
    //Above to the right
    else if (coordinate.x >= landingCoordinate.x && coordinate.y <= landingCoordinate.y)
    {
        angle = triangle.getAngleC();
        coordinate.rotate(Math.PI-angle, distance);
        angle = …
Run Code Online (Sandbox Code Playgroud)

java java-2d

6
推荐指数
3
解决办法
8759
查看次数

核心数据:NSFetchRequest按多对多关系排序

假设我有一个父实体,每个实体都有许多子节点.我想让所有的父母按孩子的数量排序.类似于以下伪代码的东西:

NSEntityDescription * entity = [NSEntityDescription entityForName:@"Parent" inManagedObjectContext:managedObjectContext];

[[NSSortDescriptor alloc] initWithKey:@"children.count" ascending:NO];
//Execute request
Run Code Online (Sandbox Code Playgroud)

有没有办法使用核心数据构建这样的提取?如果没有办法做到这一点,将使用sortedArrayUsingSelector:_PFBatchFaultingArray批量大小的好处进行排序?

谢谢,本

core-data objective-c

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

指向成员函数的指针 - C++ std :: list sort

如何将指向成员函数的指针传递给std :: list.sort()?

这可能吗?谢谢

struct Node {
       uint32_t ID;
       char *   Value;
};

class myClass {
          private:
            uint32_t  myValueLength;
          public:
            list<queueNode *> MyQueue;
            bool compare(Node * first, Node * second);
            bool doStuff();
}

bool myClass::compare(Node * first, Node * second) {
    unsigned int ii =0;
    while (ii < myValueLength)
    {
        if (first-> Value[ii] < second-> Value[ii]) 
        {
            return true;
        } else if (first-> Value[ii] > second-> Value[ii])
        {
            return false;
        }

        ++ii;
    }

    return false;
}

bool myClass::doStuff()
{
    list.sort(compare); …
Run Code Online (Sandbox Code Playgroud)

c++ comparison list

5
推荐指数
2
解决办法
8958
查看次数

等待C++的多个事件

是否有推荐的方法来等待多个输入.例如,我希望我的程序能够从3个来源接收输入:

监听线程条件,例如pthread_cond_wait()

从标准输入获取数据,例如getline()

听套接字例如accept()

完成此任务的最佳方法是什么?我是否需要为每个不同的输入源提供一个线程?谢谢

c++ multithreading posix pthreads

5
推荐指数
2
解决办法
5522
查看次数

全屏纹理iPhone OpenGL ES

我知道iphone上的OpenGL纹理需要2的强大功能,OpenGL 2.0也是如此吗?如果我有一个尺寸为320 x 480的图像并想要全屏绘制,那么使用OpenGL可以做到这一点.

谢谢

iphone opengl-es

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

stack&realloc问题C++

int main()
{
   char myString = NULL;
   realloc(&myString, 5);
   strncpy((char *)&myString, "test", 5);
}
Run Code Online (Sandbox Code Playgroud)

似乎工作正常,但我仍然有点困惑堆栈与堆,这是允许的吗?myString是否需要手动释放,还是在超出范围时释放?


编辑:感谢您的回复,所以我认为这同样是非法的

//I want the code to change myString to "tests"
char myString[5] = "test";
realloc(&myString, strlen(myString)+2);
myString[4] = 's';
myString[5] = '\0';
Run Code Online (Sandbox Code Playgroud)

c c++ memory memory-management heap-corruption

4
推荐指数
2
解决办法
3992
查看次数

将整数复制到Buffer memcpy C++

基本上我想将指针的地址存储在缓冲区中.不要问我为什么

char * buff = "myBuff";
char * myData = (char*)malloc(sizeof(char*));
int addressOfArgTwo = (unsigned int)buff;
memcpy(myData, &addressOfArgTwo, sizeof(char*));

cout << "Int Val: " << addressOfArgTwo << endl;
cout << "Address in buffer:" << (unsigned int)*myData << endl;
Run Code Online (Sandbox Code Playgroud)

我不明白为什么上面的代码不起作用.它输出:

Int Val: 4472832
Address in buffer:0
Run Code Online (Sandbox Code Playgroud)

当缓冲区中的Int Val和Address应该相同时.谢谢

c++ pointers

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