我遇到一个问题,即两个具有不同功能和相同参数对象的线程导致为这些对象赋予不同的值。
要清除,请遵守以下代码:
realm.close()
虽然每个键击的函数'Move'中的值'x'发生变化,但在'Draw'函数中获取该值仍然具有'pl1'的初始值(即5)。
如何让'Draw'获得'Move'给出的相同值? 我感谢任何帮助和指导。
提前谢谢!
答案 0 :(得分:1)
您正在按值传递玩家
static void Move(Player pl)
而不是引用/指针,因此两个函数都有自己的原始变量的本地副本。
static void Move(Player& pl)
将通过引用获取变量,并使两个函数都可以访问原始变量。
此外,除非getValue
和setValue
实现某种形式的锁定,否则此代码不是线程安全的。
答案 1 :(得分:1)
问题在于,当您希望通过引用传递pl1时,您将通过值传递pl1。尽管看起来你正在将pl1传递给每个函数,但真正发生的是Move和Draw线程都在构造新的Player对象。如果通过引用传递,则两个线程将引用相同的对象,而不是创建自己的副本。尝试将函数的签名更改为以下内容:
static void Move(Player &p);
static void Draw(Player &p);
另外,请考虑将一些退出条件放入您的函数中。由于while(1)永远不会退出,join()函数将永远等待。希望有所帮助!