c++.windows.32-bits - Multithreading problem
- Heinz-Peter Nüttgens (42/42) Jan 29 2004 Hello,
- Jan Knepper (8/65) Jan 29 2004 Why don't you just wait for the thread with WaitForSingleObject /
Hello, perhaps someone can help? In my applications I use several threads. The main one handles user in- and output, window handling, drawing and so on. Then i've got a thread that communicates with some piece of hardware. This thread is started by the first one and depending what kind of task is to be done the first waits for the second to finish. And that's the point. Here is the routine, which should enable the other threads to get processor time: VOID wait_for_thread( ULONG ms) { clock_t t; if( ms ) { t = ((clock_t)ms * CLK_TCK) / 1000L; t += clock(); } else { t = 0; } do { /* version 1 */ (VOID)MsgWaitForMultipleObjects( 0L, NULL, FALSE, 0L, 0L); /* version 2 */ // sleep(0L); } while( ms && clock() < t ); return; } This routine should only wait for n milliseconds and during that time period enable other threads to do their work, but it should finish as soon as possible. Version 1 is now working quite well but not perfect. I tried version 2 (I know only for threads that don't produce messages to be handled). But this one was much slower and delayed the whole application. Mostly this wait routine is called with 0 (zero) ms. I do that just to initiate task switching, because the threads depend on hardware drivers which themselve need processor time. Perhaps there is a big mistake in my theory to handle multiple threads? Greetings Heinz-Peter
Jan 29 2004
Why don't you just wait for the thread with WaitForSingleObject / WaitForMultipleObjects with the thread handle? Jan Heinz-Peter Nüttgens wrote:Hello, perhaps someone can help? In my applications I use several threads. The main one handles user in- and output, window handling, drawing and so on. Then i've got a thread that communicates with some piece of hardware. This thread is started by the first one and depending what kind of task is to be done the first waits for the second to finish. And that's the point. Here is the routine, which should enable the other threads to get processor time: VOID wait_for_thread( ULONG ms) { clock_t t; if( ms ) { t = ((clock_t)ms * CLK_TCK) / 1000L; t += clock(); } else { t = 0; } do { /* version 1 */ (VOID)MsgWaitForMultipleObjects( 0L, NULL, FALSE, 0L, 0L); /* version 2 */ // sleep(0L); } while( ms && clock() < t ); return; } This routine should only wait for n milliseconds and during that time period enable other threads to do their work, but it should finish as soon as possible. Version 1 is now working quite well but not perfect. I tried version 2 (I know only for threads that don't produce messages to be handled). But this one was much slower and delayed the whole application. Mostly this wait routine is called with 0 (zero) ms. I do that just to initiate task switching, because the threads depend on hardware drivers which themselve need processor time. Perhaps there is a big mistake in my theory to handle multiple threads? Greetings Heinz-Peter-- ManiaC++ Jan Knepper But as for me and my household, we shall use Mozilla... www.mozilla.org
Jan 29 2004