C/C++ void포인터, 함수포인터
조회수 1801회
현재 Nachos Project를 하고 있습니다. Semaphore이나 Lock없이 여러 thread가 하나의 특정 data structure을 건드릴 때 나타나는 오류를 확인 하는 프로그램인데요,
void RemoveNItems(TestArgument testArg) {
for (int i = 0; i < testArg.N; i++){
int key;
if (testArg.list->remove(&key) != NULL) {
cout << "\t\tThread has REMOVED item with key \'" << key << "\'"<< endl;
}
else {
cout << "\t\tThread couldn't remove item. List was Empty." << endl;
}
}
}
void InsertNItems(TestArgument testArg) {
for(int i = 0; i < testArg.N; i++) {
int key = rand() % 100;
char* item = new char((rand() % 25) + 65);
testArg.list->SortedInsert(item, key);
cout << "\t\tThread has INSERTED item with key \'" << key << "\'" << endl;
}
}
void TestThreadTask(TestArgument testArg) {
InsertNItems(testArg);
RemoveNItems(testArg);
}
TestThreadTask
가 Thread가 실행하는 Task입니다.
thread.h
에서 Fork가
void Fork(VoidFunctionPtr, void*);
로 정의 되어있는데,
VoidFunctionPtr
은 typdef void (*VoidFunctionPtr)(void*)
로 정의되어있습니다.
typedef struct {
DLList *list;
int T;
int N;
} TestArgument;
인자로 넘겨줄려고 하는 3개의 변수를 담은 structure입니다.
for (int i = 0; i < T; i++) {
Thread* t = new Thread("SelfTest");
t->Fork(&TestThreadTask, testArg);
}
이렇게 하니
No matching function call to 'Thread::Fork(void (*)(TestArgument), TestArgument&)'
혹은
no known conversion for argument 2 from 'TestArgument' to 'void*'
등등 타입과 타입변환 등에 관한 오류가 나네요.. 어떻게 해결해야 할지 모르겟네요
인자로 구조체를 사용해서 형변환이 안되나 싶어, 인자를 int로 받는 함수를 만들어서
t->Fork(&func, i);
이런식으로 해도,
인자값 앞에 (void*)
, (void*)&
등등 해보아도 소용없네요
보이드 포인터, 함수포인터는 처음 사용해보아서 어떤 식으로 해야할 지 잘 모르겠습니다ㅠㅠ
답변 해주시면 감사하겠습니다.!!
..
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력