This guide was origionally posted at: Seeing as how its amazingly useful, and no new site for Martin Harvey can be found (at least in the hours I've spent searching), I decided to post it up here. Martin if your still around, and we all hope you are, please let us know where to look for the latest and greatest of this. Also if I've offended you by placing your excelent work up, let me know and I will remove it.

This document last updated on Saturday September 16 2000 at 9:00 PM BST.

Multithreading - The Delphi Way.

Martin Harvey.

Version 1.1

Table of Contents.

Recommended Reading.
Navigation hints.
Change history.

Chapter 1. What are threads? Why use them?
Chapter 2. Creating a thread in Delphi.
Chapter 3. Basic synchronization.
Chapter 4. Simple thread destruction.
Chapter 5. More thread destruction. Deadlock.
Chapter 6. More synchronization: Critical sections and mutexes.
Chapter 7. Mutex programming guidelines. Concurrency control.
Chapter 8. Delphi thread safe classes and Priorities.
Chapter 9. Semaphores. Data flow scheduling. The producer - consumer relationship.
Chapter 10. I/O and data flow: from blocking to asynchronous and back.
Chapter 11. Synchronizers and Events.
Chapter 12. More Win32 synchronization facilities.
Chapter 13. Using threads in conjunction with the BDE, Exceptions and DLLs.
Chapter 14. A real world problem, and its solution.


This guide is intended for anyone who is interested in improving performance and responsiveness in their Delphi applications by using threads. It covers a range of topics from absolute beginner to intermediate level, and some of the real world examples raise issues bordering on the advanced. It assumes that the reader has a reasonable knowledge of Object Pascal programming, including simple object orientation, and a working understanding of event based programming.


Dedicated to three members of the Computer Science department at the University of Cambridge: Dr Jean Bacon, Dr Simon Crosby, and Dr Arthur Norman.

Many thanks to Jean as a tutor for making a complicated subject seem simple, for providing excellent reference material, and for lifting a corner of the veil around a hitherto mysterious subject. She also deserves thanks as a director of studies, for explaining the Computer science timetable to me. It took me three years to figure it out for myself!

Many thanks to Simon as a tutor, for showing me that although modern operating systems may be fiendishly complicated, the principles underlying them are simple. He also deserves thanks for taking on a student with unconventional ideas about final year project material, and for providing much useful advice on my project dissertation.

Arthur Norman never taught me a thing about multithreading. He did however teach me many other things, which helped me when writing the more complicated parts of this guide:

He also deserves a mention for some of the best quotes ever to fall from a computer science lecturers lips: He even has his own fan page.

Recommended reading:

Title: Concurrent Systems: An integrated approach to Operating Systems, Database, and Distributed Systems.
Author: Jean Bacon.
Publisher: Addison-Wesley
ISBN: 0-201-41677-8

The author welcomes suggestions for other useful titles.

Navigation hints.

The narrative and diagrams in this guide are all contained in single HTML pages, one for each chapter. The source code examples appear in pop up windows. You will need a javascript enabled browser to view these. To facilitate viewing of the narrative and source in parallel, the reader may find it useful to tile the various web browser windows. This can be achieved by right clicking on the task bar, and selecting "Tile Windows Vertically".

Change history.

Version 1.1:


Many thanks to the following people for reviewing, suggesting, correcting and generally improving this guide:

© Martin Harvey 2000.