Preliminary solution to the stuttering problem.
This commit is contained in:
		
							
								
								
									
										27
									
								
								st.c
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								st.c
									
									
									
									
									
								
							| @@ -48,7 +48,7 @@ | ||||
| #define ESC_ARG_SIZ   16 | ||||
| #define STR_BUF_SIZ   256 | ||||
| #define STR_ARG_SIZ   16 | ||||
| #define DRAW_BUF_SIZ  1024 | ||||
| #define DRAW_BUF_SIZ  20*1024 | ||||
| #define UTF_SIZ       4 | ||||
| #define XK_NO_MOD     UINT_MAX | ||||
| #define XK_ANY_MOD    0 | ||||
| @@ -2329,7 +2329,8 @@ void | ||||
| run(void) { | ||||
| 	XEvent ev; | ||||
| 	fd_set rfd; | ||||
| 	int xfd = XConnectionNumber(xw.dpy); | ||||
| 	int xfd = XConnectionNumber(xw.dpy), i; | ||||
| 	struct timeval drawtimeout; | ||||
|  | ||||
| 	for(;;) { | ||||
| 		FD_ZERO(&rfd); | ||||
| @@ -2340,9 +2341,29 @@ run(void) { | ||||
| 				continue; | ||||
| 			die("select failed: %s\n", SERRNO); | ||||
| 		} | ||||
| 		if(FD_ISSET(cmdfd, &rfd)) | ||||
|  | ||||
| 		/* | ||||
| 		 * Stop after a certain number of reads so the user does not | ||||
| 		 * feel like the system is stuttering. | ||||
| 		 */ | ||||
| 		for(i = 0; i < 1000 && FD_ISSET(cmdfd, &rfd); i++) { | ||||
| 			ttyread(); | ||||
|  | ||||
| 			FD_ZERO(&rfd); | ||||
| 			FD_SET(cmdfd, &rfd); | ||||
| 			/* | ||||
| 			 * Just wait a bit so it isn't disturbing the | ||||
| 			 * user and the system is able to write something. | ||||
| 			 */ | ||||
| 			drawtimeout.tv_sec = 0; | ||||
| 			drawtimeout.tv_usec = 5; | ||||
| 			if(select(cmdfd+1, &rfd, NULL, NULL, &drawtimeout) < 0) { | ||||
| 				if(errno == EINTR) | ||||
| 					continue; | ||||
| 				die("select failed: %s\n", SERRNO); | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		while(XPending(xw.dpy)) { | ||||
| 			XNextEvent(xw.dpy, &ev); | ||||
| 			if(XFilterEvent(&ev, xw.win)) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Christoph Lohmann
					Christoph Lohmann