Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.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++ 创建线程,但不要';不要在linux中立即运行它_C++_Linux_Multithreading_Unix_Pthreads - Fatal编程技术网

C++ 创建线程,但不要';不要在linux中立即运行它

C++ 创建线程,但不要';不要在linux中立即运行它,c++,linux,multithreading,unix,pthreads,C++,Linux,Multithreading,Unix,Pthreads,我试图在线程中执行我的程序,我使用pthread\u create(),但它会立即运行线程。我希望允许用户在运行之前更改线程优先级。如何解决 for(int i = 0; i < threads; i++) { pthread_create(data->threads+i,NULL,SelectionSort,data); sleep(1); print(data->array); } for(int i=0;ithreads+i,NULL,Selectio

我试图在线程中执行我的程序,我使用
pthread\u create()
,但它会立即运行线程。我希望允许用户在运行之前更改线程优先级。如何解决

for(int i = 0; i < threads; i++)
{
   pthread_create(data->threads+i,NULL,SelectionSort,data);
   sleep(1);
   print(data->array);
}
for(int i=0;ithreads+i,NULL,SelectionSort,data);
睡眠(1);
打印(数据->数组);
}

对于pthread,优先级不是在创建线程后设置的,而是通过在创建线程时传递合适的属性来设置的:线程属性位于
pthread\u create()
调用中指定的
NULL
位置。如果您想延迟线程创建,直到用户给您一个优先级,您可以创建一个期望优先级的函数对象,在调用该函数对象时,您将启动线程。当然,您仍然需要跟踪这样创建的对象(可能使用类似于
std::future
-like的对象)以便稍后加入该线程


请注意,提供答案不应被理解为支持线程优先级:据我所知,玩线程优先级是不明智的。

对于pthreads,优先级不是在创建线程后设置的,而是在创建线程时传递合适的属性:线程属性位于
pthread\u create()
调用中指定的
NULL
位置。如果您想延迟线程创建,直到用户给您一个优先级,您可以创建一个期望优先级的函数对象,在调用该函数对象时,您将启动线程。当然,您仍然需要跟踪这样创建的对象(可能使用类似于
std::future
-like的对象)以便稍后加入该线程


请注意,提供答案不应被解释为认可线程优先级:据我所知,玩弄线程优先级是不明智的。

在创建线程时设置优先级

替换

int local_errno;

local_errno = pthread_create(..., NULL, ...);
if (local_errno != 0) { ... }


在创建线程时设置优先级

替换

int local_errno;

local_errno = pthread_create(..., NULL, ...);
if (local_errno != 0) { ... }


您可以使用pthread的attr参数设置优先级_create@pm100我知道如何设置优先级,问题是如何不立即运行创建的线程,而是允许用户在运行C++之前运行代码或改变优先级(代码)(请使用C++),除非有原因,否则请不要标记C和C++。你在C++中编码,只在C++中加标签,谢谢。你需要在请求之前尝试解决方案。在创建线程之前请求用户输入。尝试向接收用户输入的pthread_create()传递另一个例程。研究使用进程控制结构来同步开始和停止。其他人已经解释了如何在线程创建期间使用属性来设置线程优先级。在更广泛的范围内,因此无论您想要配置线程(优先级、cpu相关性等)做什么,都必须在创建线程的过程中完成,如果在线程已经运行之后无法应用它。您可以使用pthread的attr参数设置优先级_create@pm100,我知道如何设置优先级,问题是如何不立即运行创建的线程,而是允许用户在运行C++之前使用代码的图像(坏)运行它或更改优先级,除非有原因,请不要标记C和C++。你在C++中编码,只在C++中加标签,谢谢。你需要在请求之前尝试解决方案。在创建线程之前请求用户输入。尝试向接收用户输入的pthread_create()传递另一个例程。研究使用进程控制结构来同步开始和停止。其他人已经解释了如何在线程创建期间使用属性来设置线程优先级。在更广泛的范围内,因此无论您想做什么来配置线程(优先级、cpu相关性等),都必须在线程创建过程中完成,如果在线程已经运行后无法应用。我正尝试像您一样做,但失败了(它不改变优先级),哪里可能出错?我们告诉过您关于映像的什么?!?那和我贴的不一样?!?为什么我给一个链接到照片是不好的?好的,如何重新排列我发布的代码?关于“为什么我给照片提供链接很糟糕?”,你没有提供图片内容作为文本很糟糕。如果你愿意,你也可以提供一个图片。关于“如何重新排列我发布的代码?”,你应该使用的代码在我的答案中。我正试图像你一样做,但失败了(它没有改变优先级)哪里可能出错?我们告诉你了什么关于图片的?!?那和我贴的不一样?!?为什么我给一个链接到照片是不好的?好的,如何重新排列我发布的代码?关于“为什么我给照片提供链接很糟糕?”,你没有提供图片内容作为文本很糟糕。如果需要,您也可以提供图像。对于“如何重新排列我发布的代码?”,您应该使用的代码在我的答案中。