purebasic.info

PureBasic forum
Текущее время: Вт янв 16, 2018 8:41 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: #PB_Event_CloseWindow Программа зависает!
СообщениеДобавлено: Ср июл 03, 2013 7:38 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пт янв 27, 2012 7:12 pm
Сообщений: 880
Откуда: Кустанай
Благодарил (а): 27 раз.
Поблагодарили: 13 раз.
Пункты репутации: 7
Процедура закрытия ниже по оси Y :D
Вкратце - мьютекс прикрывает зад всем глобальным переменным, после нажатия кнопки закрыть открывается процедура, которая ловит этот мьютекс, после чего начинает отключать потоки, потом сохраняет данные, отпускает мьютекс и закрывает программу.
И всё бы нечего, но она раз через два виснет, причём на стадие отлова мьютекса, я даже дебаг втыкал, она его просто не ловит и зависает, знаю, надо ждать, но 30 минут, а результата нет.

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
Procedure end_program()
  LockMutex(data_mutex)
 
  If IsThread(google_thread)
    KillThread(google_thread)
  EndIf
 
  If IsThread(bing_thread)
    KillThread(bing_thread)
  EndIf
 
  If IsThread(yandex_thread)
    KillThread(yandex_thread)
  EndIf
 
  If IsThread(yandex_xml_thread)
    KillThread(yandex_xml_thread)
  EndIf
 
  If IsThread(rambler_thread)
    KillThread(rambler_thread)
  EndIf
 
  If IsThread(nigma_thread)
    KillThread(nigma_thread)
  EndIf
 
  If IsThread(mail_thread)
    KillThread(mail_thread)
  EndIf
 
  If IsThread(yahoo_thread)
    KillThread(yahoo_thread)
  EndIf
 
  If IsThread(aol_thread)
    KillThread(aol_thread)
  EndIf
 
  If IsThread(clusty_thread)
    KillThread(clusty_thread)
  EndIf
 
  If IsThread(gigablast_thread)
    KillThread(gigablast_thread)
  EndIf
 
  If IsThread(lycos_thread)
    KillThread(lycos_thread)
  EndIf
 
  If IsThread(inform_thread)
    KillThread(inform_thread)
  EndIf
 
  If IsThread(check_tic_thread)
    KillThread(check_tic_thread)
  EndIf
 
  If IsThread(search_reg_forms_thread)
    KillThread(search_reg_forms_thread)
  EndIf
 
  arr_size = ArraySize(tic_threads())
  For i=0 To arr_size
    If IsThread(tic_threads(i))
      KillThread(tic_threads(i))
    EndIf
  Next i
  UnlockMutex(data_mutex)
 
  ;Тут сохраняются данные
  save_data()
 
  End
EndProcedure



Я тут вообще не вижу причины для зависания, но оно зависает именно при попытке получить контроль над мьютексом.

_________________
Детям нельзя в интернет. От детей интернет тупеет.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Yahoo [Bot] и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB