В коде есть несколько потенциальных "глючных" мест.
If CreateThread(@ReceiveTCPdata(),0) = 1
|
С чего вдруг функции CreateThread() возвращать 1?
В справке ясно написано.
Возвращаемое значение.
Номер созданного потока, или ноль если новый поток создать невозможно. Этот номер необходим, если вы хотите контролировать поток с помощью других функций этой библиотеки.
|
Номер потока не обязательно равен числу 1. В итоге даже при успешном создании потока, прога завершится с сообщением об ошибке.
UnlockMutex(MutexIn)
DeleteElement(QueueIn())
|
Почему сначала расблокируется мьютекс, а затем удаляется элемент? Должно быть наоборот. Иначе возможна ситуация что будет удален не тот элемент, если другой поток обратится в списку и изменит текущий элемент.