[DUG] Program crashes - anyone knows why?

Matthew Comb matt at ferndigital.com
Mon Nov 27 11:16:50 NZDT 2006


Sorry if Im stating the obvious.

Have you suspended your threads before assigning any of their properties ?
This can cause problems.

What does your thread execute do aside from update the GUI in your syn
routine? Does it access anything else application wide? or any local
files?

Are you using Indy for your sockets? (These are components not classes)

Are you using an activex controls ?

Matt.

> Yeah I've made an UpdateGUI method which I call with
> Synchronize(UpdateGUI)
>
>
> On Sun, 26 Nov 2006 21:38:37 +0100, Matthew Comb <matt at ferndigital.com>
> wrote:
>
>> Have you made the insertion into the TListView threadsafe? e.g.
>> Synchronized or similar ?
>>
>> Matt.
>>
>>> They display the information in a TListView set to Report style. When a
>>> keyword is processed it is added to the list. There shouldn't be
>>> problems
>>> with this, I've previously worked on an application that processed
>>> 60.000
>>> keywords and there was no problem (though there was only 1 thread
>>> there).
>>>
>>> Csaba
>>>
>>>
>>> On Sun, 26 Nov 2006 21:26:34 +0100, Matthew Comb <matt at ferndigital.com>
>>> wrote:
>>>
>>>> I would be more concerned with what the threads do with the
>>>> information
>>>> they get once completed searching.
>>>>
>>>> e.g. displaying on main form in some way.
>>>>
>>>> Exceptions within a thread shouldn't propogate to the main thread
>>>> unless
>>>> im missing something?
>>>>
>>>> Matt.
>>>>
>>>>> Thanks Conor, I've added (A) and sent the application to the client,
>>>>> so
>>>>> let's hope there will be some progress.
>>>>>
>>>>>
>>>>> On Sun, 26 Nov 2006 20:35:38 +0100, Conor Boyd
>>>>> <Conor.Boyd at trimble.co.nz>
>>>>> wrote:
>>>>>
>>>>>> That's a very detailed email... ;-)
>>>>>>
>>>>>> Without delving deeper, I've a couple of comments/suggestions.
>>>>>>
>>>>>> A) You definitely need a try-except block in your Execute method.
>>>>>> You
>>>>>> must not let unhandled exceptions propagate out of a thread.  Even
>>>>>> if
>>>>>> you only put a call to OutputDebugString in your exception handler,
>>>>>> then
>>>>>> that means you could use e.g. DebugView from Sysinternals to view
>>>>>> exceptions being thrown.
>>>>>>
>>>>>> B) Try adding the madExcept library from www.madshi.net to your
>>>>>> application.  It should help hugely in tracking down unhandled
>>>>>> errors
>>>>>> like this, especially when they are happening on a remote machine.
>>>>>> You
>>>>>> can configure it so that in the event of an error, your program can
>>>>>> automatically email you the error reports including call stacks,
>>>>>> etc.
>>>>>>
>>>>>> C) You could also try using the URLDownloadToFile function from the
>>>>>> URLMon unit instead.  I use it in a threaded application, and it
>>>>>> works
>>>>>> fine for me.
>>>>>>
>>>>>> I don't know what you're using to access Google, but I've been using
>>>>>> the
>>>>>> Indy components very successfully in one of my projects.
>>>>>>
>>>>>> Good luck in trying your error down...
>>>>>>
>>>>>> HTH,
>>>>>>
>>>>>> Conor
>>>>>>
>>>>>> -----Original Message-----
>>>>>> From: delphi-bounces at ns3.123.co.nz
>>>>>> [mailto:delphi-bounces at ns3.123.co.nz]
>>>>>> On Behalf Of Gajo Csaba
>>>>>>
>>>>>> I wrote a multithreaded application for a client and it crashes on
>>>>>> the
>>>>>> client's computer, while it works ok on mine. Can someone give me a
>>>>>> clue
>>>>>> as to what might be the problem?
>>>>>>
>>>>>> The program works like this: I have two TThreadLists: one contains a
>>>>>> list of keywords (~20000) while the other a list of proxy servers
>>>>>> (~500). When the user clicks on the button, 21 threads are created.
>>>>>> 1
>>>>>> thread directly accesses Google, enters the keyword and processes
>>>>>> the
>>>>>> result. The other 20 threads do the same, except they use a proxy
>>>>>> server.
>>>>>>
>>>>>> OK, so each thread grabs a keyword from the list and then removes it
>>>>>> from the list, so no one else could use it again. It tries to access
>>>>>> the
>>>>>> internet. If the connection fails then it means the proxy doesn't
>>>>>> work,
>>>>>> so it gets another proxy address from the list. No two threads ever
>>>>>> share the same proxy. If there are no more free proxies left, the
>>>>>> thread
>>>>>> dies (and returns the unprocessed keyword to the list).
>>>>>>
>>>>>> [snip]
>>>>>>
>>>>>> _______________________________________________
>>>>>> Delphi mailing list
>>>>>> Delphi at ns3.123.co.nz
>>>>>> http://ns3.123.co.nz/mailman/listinfo/delphi
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Using Opera's revolutionary e-mail client: http://www.opera.com/mail/
>>>>> _______________________________________________
>>>>> Delphi mailing list
>>>>> Delphi at ns3.123.co.nz
>>>>> http://ns3.123.co.nz/mailman/listinfo/delphi
>>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> Delphi mailing list
>>>> Delphi at ns3.123.co.nz
>>>> http://ns3.123.co.nz/mailman/listinfo/delphi
>>>>
>>>>
>>>
>>>
>>>
>>> --
>>> Using Opera's revolutionary e-mail client: http://www.opera.com/mail/
>>> _______________________________________________
>>> Delphi mailing list
>>> Delphi at ns3.123.co.nz
>>> http://ns3.123.co.nz/mailman/listinfo/delphi
>>>
>>
>>
>> _______________________________________________
>> Delphi mailing list
>> Delphi at ns3.123.co.nz
>> http://ns3.123.co.nz/mailman/listinfo/delphi
>>
>>
>
>
>
> --
> Using Opera's revolutionary e-mail client: http://www.opera.com/mail/
> _______________________________________________
> Delphi mailing list
> Delphi at ns3.123.co.nz
> http://ns3.123.co.nz/mailman/listinfo/delphi
>




More information about the Delphi mailing list