C ++多线程

时间:2012-09-14 10:58:31

标签: c++ multithreading

我正在为一个使命召唤游戏编写一个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 ++进行线程化

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

(THREAD) { 功能 }

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

非常感谢你的帮助

1 个答案:

答案 0 :(得分:0)

启动一个帖子非常简单:

#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;
}

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

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