我創建了一個widget.h文件,其中包含pthread_function
的聲明,我想在widget.cpp中的該類Widget的成員函數destroyWidget
中調用它。但總是顯示錯誤。我將顯示.cpp和.h文件。在成員函數內調用pthread_create?
widget.h文件
class Widget
{
public:
Widget();
void createWidget(int x,int y,int w,int h);
void showWidget();
int wid;
pthread_t thread;
int *incomingval,id;
void join();
Window win;
XEvent evt;
private:
void* destroyWidget(void* ptr);
Display *disp;
int screenNumber;
unsigned long white;
unsigned long black;
long eventMask;
GC gc;
int tbit;
int *incoming,val;
};
現在widget.cpp
Widget::Widget()
{
disp=XOpenDisplay(NULL);
screenNumber=DefaultScreen(disp);
white=WhitePixel(disp,screenNumber);
black=BlackPixel(disp,screenNumber);
eventMask=StructureNotifyMask;
tbit=0;
}
void Widget::createWidget(int x,int y,int w,int h)
{
wid=w;
win= XCreateSimpleWindow(disp,DefaultRootWindow(disp),x,y,w,h,1,white,black);
}
void Widget::showWidget()
{
XMapWindow(disp,win);
XFlush(disp);
gc=XCreateGC(disp,win,0,NULL);
XSetForeground(disp,gc,white);
XDrawLine(disp,win,gc,wid-10,0,wid,10);
XDrawLine(disp,win,gc,wid-10,10,wid,0);
//calling the thread function
pthread_create(&thread, NULL, destroyWidget, this);
}
void Widget::join()
{
pthread_join(thread, NULL);
}
void* Widget::destroyWidget(void* ptr)
{
Widget* mw = static_cast(ptr);
eventMask=ButtonPressMask|ButtonReleaseMask;
XSelectInput(disp,win,eventMask);
do{
printf("id= %d",id);
XNextEvent(disp,&evt);
}while(evt.type!=ButtonRelease);
XDestroyWindow(disp,win);
XCloseDisplay(disp);
return NULL;
}
現在的main.cpp文件
#include "widget.h"
#include
int main()
{
Widget* w=new Widget();
Widget* n=new Widget();
n->createWidget(20,20,150,150);
w->createWidget(50,50,250,250);
n->showWidget();
w->showWidget();
n->join();
w->join();
return 0;
}
誤差
widget.cpp: In member function ‘void Widget::showWidget()’:
widget.cpp:44:51: error: argument of type ‘void* (Widget::)(void*)’ does not match ‘void* (*)(void*)’
Indendation確實做了很多事情來使你的代碼可讀。我強烈建議將來使用它。即使只有幾個空間也會變冷。 – 2011-06-15 13:58:13
你應該**不**使用成員函數**甚至不是**一個靜態的。在這裏閱讀正確的解決方案。 HTTP://計算器。com/questions/6352280/pthread-create-error-in -c/6352434#6352434 – 2011-06-15 14:59:45