gpt4 book ai didi

C++ 随机种子、全局对象和 SDL_Threads

转载 作者:太空宇宙 更新时间:2023-11-04 12:28:21 25 4
gpt4 key购买 nike

在我的程序中,我有一个全局 cpp 文件对象,它接受一个整数作为参数。

//In global header
extern Object example;

//In global cpp file
Object example( (rand() % 6) );

我想为对象的参数生成一个随机数,但种子没有到达全局变量,因为种子是在另一个 cpp 文件中创建的,稍后在 main 中调用。

我的主要问题是随机种子没有达到 global.cpp 中对象的参数,但我也出于特定原因将其放在那里,这涉及线程。

我的主要问题是:随机种子可以到达全局变量吗?如果是,请告诉我怎么做

(如果是,则下一个问题无关紧要)

但如果不可能的话,这个问题与线程和创建对象的位置有关。对象类在运行线程中调用一个函数,在另一个线程中调用不同的函数,例如:

//线程A

int thread(void *data)
{
example.showimage();

return 0;
}

//ThreadB
int thread(void *data(
{
example.moveimage();

return 0;
}

我想在两个线程之间实现这种功能,但是有没有办法在不在全局变量中创建对象的情况下实现这一点?

最佳答案

最好的方法是使用单例模式(注意这个例子不是线程安全的):

//in a header
class RandomSeed
{
public:
static RandomSeed& instance()
{
static RandomSeed the_instance;
return the_instance;
}
int value() const {return value_;}
private:
RandomSeed() {/*initialization code*/}
RandomSeed(const RandomSeed& rs); // disallowed
RandomSeed& operator=(const RandomSeed& rs); // disallowed
int value_;
};

// in your file
#include "random_seed.h"
srand(RandomSeed::instance().value());

要实现线程安全,请使用双锁或其他一些锁定机制。另一种选择是查看 Boost.call_once为您初始化数据。

关于C++ 随机种子、全局对象和 SDL_Threads,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/754753/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com