Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Multithreading under windows

Author: Stefan Meyer-Kahlen

Date: 04:50:01 12/06/00

Go up one level in this thread


On December 05, 2000 at 21:24:16, Vincent Diepeveen wrote:

>On December 05, 2000 at 12:37:02, Bruce Moreland wrote:
>
>>On December 05, 2000 at 10:28:27, Vincent Diepeveen wrote:
>>
>>>this is not nonsense. blocking is GARANTUEED by windows.
>>>See the microsoft documents on it. they GARANTUEE blocking to
>>>prevent parallel problems.
>>
>>Are you telling me that if I get a mouse button click message from Windows, and
>>do something outrageously expensive before returning from that message, that my
>>engine threads will block until I return?
>>
>>bruce
>
>Argh damn it again i wrote something and i wrote it for nothing
>as IE4 forgot what i wrote somehow i hit some buttons and all
>my written text gone!
>
>Online writing is not my favourite thing!
>
>Anyway what you write here above is a generalization that doesn't
>apply always.
>
>What i did was next
>
>  WndProc gets called as user clicks in pulldownwindow quit.
>  then in wndproc i call function: killthecrap();
>
>  void KillTheCrap(HWND hwnd, ..) {
>    ..
>    ..("Are you sure?");
>    ..("Are you very sure?");
>    ..("You really don't follow my advice?");
>    ..
>    SendToEngine(QuitEngine); /* now the engine


If this is done by PostMessage() you get a deadlock here as you are already in
the MainWndProc and the thread handling the Windows messages is blocked here!
Try SendMessage(), which might work but still I wouldn't like it.

A general rule might be to never block this MainWndProc thread.

Stefan



>    gets a quit message. After it has processed it
>    it ships acknowledgement to the enginethread
>    that listens to the engine.
>    The enginethread puts after getting acknowledgement
>    the volatile variable quitengine to 1.
>    then the enginethread quits.
>
>    while(!quitengine) {
>      ;
>    }
>
>  }
>
>Now my program was hung. I figured out that the enginethread
>was blocked as long as my program was still in the WndProc()
>
>This should be pretty easy to test at home.
>
>Greetings,
>Vincent



This page took 0 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.