2012-09-14 23 views
-3

我写一个DLL出去值班游戏的一个电话,我得到了很多的工作,但我的麻烦是我下面的代码:C++多穿线

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++

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

(线程) { 功能 }

如何停止线程,如何调用/启动线程

感谢这么多的帮助

+1

http://www.justsoftwaresolutions.co.uk/threading/multithreading-in-c++0x-part-1-starting-threads.html ... – BoBTFish

+0

你应该看看助推线程 – Nick

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

一般来说,线程之间的同步很复杂,并且容易出错。注意尽量减少线程之间共享的数据量,并仔细考虑你使用这些数据所做的一切,确保它不会被一个线程访问,而另一个线程可能会改变它。

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

+0

感谢您的详细发帖!你有Skype吗?我会把你的主要课程发给你,让你更好地理解我的问题。 –

+0

注意到,使用C++ 11或boost启动线程很简单。在OP的问题中没有提到他使用的工具集。但是,如果他使用C++ 11,则是优秀的示例。恭喜,西摩先生;是个男孩! – WhozCraig