나는 C와 C++ 요소를 가진 프로그램을 만들고있다. 나는이 영역에서 내가 전문가라고 말할 수는 없지만 정적 변수가 정적으로 작용하지 않는다는 것을 알아 차리고있다. 특히 이벤트를 비동기 적으로 수신 한 다음 이벤트를 정적 대기열로 푸시하는 동안 주 스레드가 해당 대기열에서 이벤트를 팝합니다. 이벤트를 정적 대기열로 푸시 할 때 대기열 증가분을 1 씩 알 수 있고 데이터가 올바르게 채워질 수 있습니다. 그 정적 대기열에서 폴링을하면 데이터가 대기열 크기가 0이됩니다. 다른 인스턴스로 작동하는지 확인하기 위해 비동기 및 폴링 관점에서 값을 인쇄했으며 변수에 악취가 나는 정적 인 경우에도 항상 일관되게 다릅니다. 그것에 붙어있다. 정적 큐는 .cpp 파일에서 큐를 업데이트하는 동안 .c 파일에 저장됩니다. 나는 이것이 문제를 일으키지 않을 것이 거의 확실하다는 것을 거의 확신한다. 나는 여기에 C/C++ 정적 부두
/* Pointer storage */
static sdy_pointer_event_t pointer_events[MAX_POINTERS] = {0};
static int last_pointer_event = 0;
이 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는 가져온 기능에 저장된 통근 함수입니다 ... 여기
가 interactivity_mapping 파일에 저장 내 두 변수는
붙어있어 파일에는 extern 가져온 함수 c 파일의 구현이 있습니다. 비동기 적으로 호출하는 함수는이 가져온 함수 extern c 파일의 일부가 아니며 폴링 함수는이며 aol_pointer라고합니다. 비록 이것이 이런 종류의 잘못된 행동을 일으키는 지 모르겠다. 프로그램이 꽤 크기 때문에 여기에 모든 것을 던지지 않고 더 좋은 그림을 줄 수는 없다고 생각합니다.
[mcve] – AndyG
을 제공하십시오. 아마도 C++과 유사하지만 학습 할 코드가 없습니다. 우리는 여전히 붙어 있습니다 ;-) – chqrlie
정적 액세스를 동기화하고 있습니까? – Peter