-3

Call of Duty ゲーム用の 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++ のスレッド化の方法を見つける必要があります。

私はグーグルが人間の親友であることを知っていますが、誰かが単に私に例のスレッドを与えることができれば、それは実際には非常に詳細に説明していません

(スレッド) { 関数 }

スレッドの停止方法とスレッドの呼び出し/開始方法

助けてくれてどうもありがとう

4

1 に答える 1

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

一般に、スレッド間の同期は複雑で、間違いやすいものです。スレッド間で共有されるデータの量を最小限に抑えるように注意し、そのデータを使用して行うすべてのことを慎重に検討し、あるスレッドがアクセスしているときに別のスレッドが変更する可能性があることを確認してください。

ゲームを作成している場合、より単純なアプローチはシングル スレッドのイベント ループです。1 つのメイン ループが入力イベントをポーリングし、プログラムのさまざまなコンポーネントにイベントが発生したことを通知します。それに応じて状態を更新し、おそらく独自のイベントをさらに生成します。唯一の複雑な点は、プログラム全体をブロックしないように、各イベント ハンドラーがすばやく作業を行う必要があることです。

于 2012-09-14T11:08:18.967 に答える