小编gor*_*rba的帖子

在C++中#define的适当使用场景是什么?

我知道基本的规则,使用inline,enumconst不是#define,这不是我追求这个问题.我想知道的是#define在C++中使用宏以及如何使用宏的可接受场景.

请不要发布问题或链接到"define vs const"问题或"预处理器与编译器",我已经通过了Scott Meyers的Effective C++,我知道一个优于另一个的优点.

然而,经过几个小时的网上冲浪,我觉得#define被认为是C++中的某种弱者,但我确信必须有一个案例,使用它可以接受甚至是可取的.

为了推动这个问题,我猜想我可以想到的一个场景是创建一个DEBUG基于它的宏,它可以打印所有代码以及用于调试目的的所有内容.

c++ macros c-preprocessor

18
推荐指数
5
解决办法
1056
查看次数

如何限制perl中的最大并行线程数

我有一个程序(Perl)启动了大量的线程(每个线程负责根据数据处理创建图形).我开始使用的每个线程:

my @threads //list to store threads that have been launched

push @threads,threads->create(\mySubName,params...);
Run Code Online (Sandbox Code Playgroud)

线程正确启动但过了一会儿,在我打开其中几个Perl解释器崩溃后(我认为它与内存有关?).所以我的解决方案是限制我一次打开的线程数,我选择了15.我想在每个创建行之前添加一个sub来检查是否可以在我等待时触发下一个线程或执行睡眠一个完成.这就是我尝试这样做的方式.

sub checkThreads{
    my $addThread = 0;
    until($addThread){
        my $totalThreads = 0;
        foreach my $task (@threads){
            if($task->is_running()){$totalThreads++;}
        }
        if($totalThreads <= 15 ){
            print "Ok to add new thread, carry on!\n";
            $addthread = 1;
        }else{
            print "Waiting for $totalThreads threads to fire next one...\n";
            sleep 2;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

所以每次我想创建一个新线程我都会打电话

&checkThreads;
Run Code Online (Sandbox Code Playgroud)

当我等待一些线程清理时,这会产生延迟.问题是,当我打电话给那个子时,我点击我检查的那一行:

$task->is_running()
Run Code Online (Sandbox Code Playgroud)

程序退出并停止运行,没有任何错误或警告.我只想要一个计算正在运行的线程来限制它们的子程序.

如何成功执行此计数?

我尝试的其他事情是评估以下行:

scalar(threads->list());
Run Code Online (Sandbox Code Playgroud)

但这给了我一个奇怪的价值,就像它是一个不起眼的参考我相信看起来像:

threads=SCALAR(0x80fea8c)
Run Code Online (Sandbox Code Playgroud)

perl multithreading

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

标签 统计

c++ ×1

c-preprocessor ×1

macros ×1

multithreading ×1

perl ×1