私はCとC++要素を持つプログラムを開発中です。私はこの分野の専門家であるとは言えませんが、静的変数が静的に動作していないことに気付いています。具体的には、イベントを非同期的に受信し、イベントを静的キューにプッシュしますが、メインスレッドは静的キューからイベントをポップします。静的キューにイベントをプッシュすると、キューが1つ増えたことを明確に伝えることができ、データは正しく挿入されます。その静的なキューからポーリングすると、データが取得され、キューのサイズが0になります。これらのインスタンスが異なるインスタンスとして動作することを確認するために、非同期とポーリングの観点から値を表示しました。それに付けられている。 .cppファイルからキューを更新している間は、静的キューは.cファイルに格納されます。私はこれが問題を引き起こさないだろうがほぼ確実だが、誰が知っている。私はこだわっている。ここC/C++ Static Voodoo
はここinteractivity_mappingファイルに保存されている私の二つの変数...
/* Pointer storage */
static sdy_pointer_event_t pointer_events[MAX_POINTERS] = {0};
static int last_pointer_event = 0;
あるインポート機能に保存されているのextern関数がinteractivity_mappingで基本的に
/* Imported functions */
extern void GetId(SGLint32 (*WidgetId));
extern void ManageIndividualFocus(SGLbool RequestFocus, SGLbool RequestNoFocus, SGLint32 WidgetId, SGLbool IsContainer, SGLint32 NextWidgetId, SGLbool isInit, SGLint32 (*HasFocus));
extern void aol_keyboard(SGLint32 pKeyboard, SGLbool* pPressed, SGLbool* pReleased, SGLint32* pCode, SGLint32* pModifiers);
extern void aol_locate(SGLint32 pPointer, SGLfloat* pX, SGLfloat* pY);
extern void aol_pointer(SGLint32 pPointer, SGLbool* pPressed, SGLbool* pReleased, SGLint32* pButton, SGLfloat* pX, SGLfloat* pY, SGLint32* pModifiers);
extern void wrapper_PushButton(SGLint32 EmitCondition, SGLbool MouseInside, SGLbool MousePressed, SGLbool MouseReleased, SGLbool KeyPressed, SGLint32 KeyCode, SGLbool KeyReleased, SGLbool (*Selection), SGLbool (*ButtonPressed), wrapper_PushButton_mem* mem);
extern void wrapper_PushButton_reset(wrapper_PushButton_mem* mem);
ファイルcはファイルには、externインポート関数のファイルが実装されています。非同期に呼び出す関数は、このインポート関数extern cファイルの一部ではありませんが、ポーリング関数はaol_pointerと呼ばれます。私はこれがこのタイプの間違った振る舞いを引き起こすかどうかはわかりません。プログラムはかなり大きいので、私はここですべてをダンプすることなく、より良い画像を与えることはできないと思う。
[mcve] – AndyG
を提供してください。おそらくC++に固有のものですが、学習するコードはありません。私たちはまだ詰まっています;-) – chqrlie
静的なアクセスに同期していますか? – Peter