Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ NSOperationQueue与pthread优先级_C++_Objective C_Pthreads_Nsoperationqueue_Thread Priority - Fatal编程技术网

C++ NSOperationQueue与pthread优先级

C++ NSOperationQueue与pthread优先级,c++,objective-c,pthreads,nsoperationqueue,thread-priority,C++,Objective C,Pthreads,Nsoperationqueue,Thread Priority,我有一个问题: 我有一个使用一些线程的C++代码。这些线程是pthread类型的 在我的iPhone应用程序中,我使用了 NSO操作队列>代码>以及一些C++代码。 问题是:C++ pTrices总是比NSUPATORACKEXION/COD> >优先级低。p> 我怎样才能解决这个问题?我也尝试过对nsOperationQueue给予较低的优先级,但此修复方案不起作用。如果您不得不采用旋转优先级(尤其是向上),这通常表明并发模型中存在设计缺陷。这应该为非常特殊的情况保留,如实时线程(例如音频

我有一个问题:

    我有一个使用一些线程的C++代码。这些线程是pthread类型的 在我的iPhone应用程序中,我使用了<代码> NSO操作队列>代码>以及一些C++代码。

问题是:C++ pTrices总是比NSUPATORACKEXION/COD> >优先级低。p>


我怎样才能解决这个问题?我也尝试过对
nsOperationQueue
给予较低的优先级,但此修复方案不起作用。

如果您不得不采用旋转优先级(尤其是向上),这通常表明并发模型中存在设计缺陷。这应该为非常特殊的情况保留,如实时线程(例如音频播放)

首先评估线程和任务的运行方式,确保别无选择。通常,您可以做一些简单的事情,比如减少操作队列的最大操作数、减少线程总数,或者按照任务所需的资源对任务进行分组

您使用什么方法来确定线程的优先级

还要注意,设置操作的优先级会影响排队操作的顺序(而不是线程本身)

我总是能够通过调整分布来解决这个问题。你现在应该停止阅读:)


可用,但不推荐:

要降低操作的优先级,可以在操作的
main
中接近它:

- (void)main
{
  @autorelease {
    const double priority = [NSThread threadPriority];
    const bool isMainThread = [NSThread isMainThread];
    if (!isMainThread) {
      [NSThread setThreadPriority:priority * 0.5];
    }

    do_your_work_here

    if (!isMainThread) {
      [NSThread setThreadPriority:priority];
    }
  }
}
如果在此之后确实需要推送内核,那么可以通过以下方式设置pthread的优先级:


如果您不得不求助于旋转优先级(尤其是向上),这通常表明并发模型中存在设计缺陷。这应该为非常特殊的情况保留,如实时线程(例如音频播放)

首先评估线程和任务的运行方式,确保别无选择。通常,您可以做一些简单的事情,比如减少操作队列的最大操作数、减少线程总数,或者按照任务所需的资源对任务进行分组

您使用什么方法来确定线程的优先级

还要注意,设置操作的优先级会影响排队操作的顺序(而不是线程本身)

我总是能够通过调整分布来解决这个问题。你现在应该停止阅读:)


可用,但不推荐:

要降低操作的优先级,可以在操作的
main
中接近它:

- (void)main
{
  @autorelease {
    const double priority = [NSThread threadPriority];
    const bool isMainThread = [NSThread isMainThread];
    if (!isMainThread) {
      [NSThread setThreadPriority:priority * 0.5];
    }

    do_your_work_here

    if (!isMainThread) {
      [NSThread setThreadPriority:priority];
    }
  }
}
如果在此之后确实需要推送内核,那么可以通过以下方式设置pthread的优先级: