単一のスレッドが関数とイベントの処理専用になるように、posix でスレッドハンドラーを設計する必要があります。イベントについては、キューとスレッドを作成し、イベントをキューにプッシュします。しかし、関数を処理するために同じスレッドを使用するにはどうすればよいですか。関数にも同じキューを使用する必要がありますか?? もしそうなら、どのように関数を渡しますか??
質問の仕方が間違っている場合は、助けてください。
単一のスレッドが関数とイベントの処理専用になるように、posix でスレッドハンドラーを設計する必要があります。イベントについては、キューとスレッドを作成し、イベントをキューにプッシュします。しかし、関数を処理するために同じスレッドを使用するにはどうすればよいですか。関数にも同じキューを使用する必要がありますか?? もしそうなら、どのように関数を渡しますか??
質問の仕方が間違っている場合は、助けてください。
別のコメントを残しますが、スペースが必要です...
有効な C ではありませんが、アイデアは得られます。
struct task //could use an union
{
int type; //0 if task is event, 1 for "function", etc...consider using enums
int ev;
std::function<void()>> func;
};
std::queue<task> pending;
....あなたのスレッドで:
auto t = pending.front();
pending.pop();
if(t.type==0)//we have an event to process
{
proc_event(t);
}
else if(t.type==1)//run a function
{
t.func();
}
例外処理で頑張ってください。関数の 1 つがスレッドを強制終了したり、長時間ブロックしたりしないようにしてください。