C++ Multi threading

C++ Multi threading

本文关键字:threading Multi C++      更新时间:2023-10-16

我正在为使命召唤游戏编写一个DLL,我做了很多工作,但我的问题是下面的代码:

int func = 0;
-----
if (cl_ingame=1){ Sleep(35);start(); }
void start()
{
command(x,x, "c "Press up for 11th"");
func = 1;
Sleep(3000); 
command(x,x, "c "Press up for Unlock all"");
func = 2;
if (dpad = up){
if (func = 1){
do11th();
}else if (func = 2){
doUnlock();
} 
}

现在困扰的不是代码本身,而是无效的"开始"将是一个循环,现在我的问题是,如果游戏已经忙于循环,我将无法使用任何控件或调用任何函数,所以我需要了解如何为C++线程

我知道谷歌是人类最好的朋友,但它并没有真正详细地解释,如果有人能简单地给我一个例子线程像这样

(螺纹){函数}

如何停止线程以及如何调用/启动线程

非常感谢的帮助

启动线程非常简单:

#include <thread>
#include <iostream>
void thread_entry(int arg)
{
std::cout << "Thread running: argument " << arg << std::endl;
}
int main()
{
std::cout << "Thread starting" << std::endl;
std::thread thread(thread_entry, 42);
thread.join();
std::cout << "Thread finished" << std::endl;
}

线程运行时与线程的通信更为复杂。不幸的是,标准C++在高级并发方面仍然相当缺乏,因此首先使用标准库提供的原子变量、互斥对象和条件变量可能是最简单的。简单地停止线程:

#include <thread>
#include <atomic>
#include <iostream>
void thread_entry(std::atomic<bool> & stop)
{
while (!stop) {
std::cout << "Thread running" << std::endl;
sleep(1);
}
}
int main()
{
std::cout << "Thread starting" << std::endl;
std::atomic<bool> stop(false);
std::thread thread(thread_entry, std::ref(stop));
sleep(5);
stop = true;
thread.join();
std::cout << "Thread finished" << std::endl;
}

通常,线程之间的同步很复杂,而且很容易出错。注意尽量减少线程之间共享的数据量,并仔细考虑您对这些数据所做的一切,确保它永远不会被一个线程访问,而另一个线程可能会更改它。

如果你正在编写一个游戏,那么一个更简单的方法可能是单线程事件循环。单个主循环将轮询输入事件,并通知程序的各个组件它们已经发生;他们会相应地更新自己的状态,也许还会产生更多自己的事件。唯一复杂的是,每个事件处理程序都必须快速完成工作,以避免阻塞整个程序。