Почему эта программа работает только при NUM_THREADS < 8?
Подскажите уважаемые Гуру.
Компилится g++ -pthread -Wall -W -D_REENTRANT c.cpp -o c -L/usr/X11R6/lib -lpthread -lc -lX11
<PRE><TT>
#include<stdlib.h>
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<pthread.h>
#include<sys/time.h>
#include <X11/Xlib.h>
#include<X11/Xutil.h>
#include <X11/cursorfont.h>
#include <X11/keysym.h>
#include <X11/Xatom.h>
#include <X11/Xcms.h>
#define NUM_THREADS 20
inline unsigned long long get_time()
{
struct timeval tv;
gettimeofday(&tv,NULL);
return ((unsigned long long)tv.tv_sec*1000000L+(unsigned long long)tv.tv_usec);
}
void* func(void* =NULL)
{
Display* xdpy=XOpenDisplay(NULL);
int screen =DefaultScreen(xdpy);
Window root=RootWindow(xdpy,screen);
char tmp[256];
sprintf(tmp,"Thread %lu",pthread_self());
int tlen=strlen(tmp);
XcmsColor Color;
Color.format=XcmsRGBFormat;
Color.spec.RGB.blue=random()*100;
Color.spec.RGB.green=random()*100;
Color.spec.RGB.blue=random()*100;
XcmsAllocColor(xdpy,DefaultColormap(xdpy,screen),&Color,XcmsRGBFormat);
Window win=XCreateSimpleWindow(xdpy,root,100,100,400,100,6,BlackPixel(xdpy,screen),Colo r.pixel);
XSelectInput(xdpy,win,ExposureMask | KeyPressMask );
XMapWindow(xdpy,win);
GC gc=XCreateGC(xdpy,win,0,NULL);//GCForeground|GCFunction,&gcv);
XEvent event;
unsigned long long ti=get_time();
while(1)
{
while(!XPending(xdpy))
{
if((get_time()-ti)>190000)
goto endL;
sched_yield();
}
XNextEvent(xdpy, &event);
if (XFilterEvent(&event, None))
continue;
switch(event.type)
{
case KeyPress:
{
char wbuffer[256];
int wbuffer_len=sizeof(wbuffer);
KeySym keysym=0;
XLookupString(&event.xkey,wbuffer, wbuffer_len, &keysym,NULL);
if (keysym == XK_Escape)
goto endL;
if (keysym == XK_space)
::exit(0);
break;
}
case Expose:
{
if (event.xexpose.count == 0)
XDrawString(xdpy,win,gc,10,40,tmp,tlen);
break;
}
}
if((get_time()-ti)>190000)
break;
}
endL:
XFreeGC(xdpy,gc);
XDestroyWindow(xdpy,win);
XCloseDisplay(xdpy);
return NULL;
}
int main()
{
while(1)
{
int count=NUM_THREADS;
for(int ii=0;ii<count;++ii)
{
pthread_attr_t attr;
pthread_attr_t* attrp=&attr;
pthread_t tid=(pthread_t)-1;
if(pthread_attr_init(attrp)==-1)
attrp=NULL;
else
pthread_attr_setdetachstate(attrp,PTHREAD_CREATE_DETACHED);
pthread_create(&tid,&attr,func,NULL);
}
usleep(250000);
}
return 0;
}
</TT></PRE>

Ответ на:
комментарий
от anonymous


Ответ на:
комментарий
от anonymous

Ответ на:
комментарий
от burivuh

Ответ на:
комментарий
от anonymous

Ответ на:
комментарий
от anonymous


Ответ на:
комментарий
от vnp

Ответ на:
комментарий
от anonymous

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Перехват клавиш XGrabKeyboard. (2016)
- Форум Отловить нажатие комбинации клавиш в XLib (2014)
- Форум pthreads - ошибка линковки (2001)
- Форум Я, X11 и select (2009)
- Форум Как в XLib Вывести русские буквы ( в окне ) (2006)
- Форум Снова pthreads :(( (2004)
- Форум pthread_cond_timedwait (2005)
- Форум Xlib и вывод текста на RootWindow (2005)
- Форум Идентификаторы окон (2012)
- Форум Как скормить компилятору такую шляпу? (2021)