purebasic.info

PureBasic forum
Текущее время: Ср июн 19, 2019 6:10 pm

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




Начать новую тему Ответить на тему  [ Сообщений: 140 ]  На страницу Пред.  1 ... 3, 4, 5, 6, 7, 8, 9, 10  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 01, 2012 12:42 pm 
Не в сети
лентяй ужасный
Аватар пользователя

Зарегистрирован: Вс фев 27, 2011 4:23 pm
Сообщений: 646
Благодарил (а): 4 раз.
Поблагодарили: 5 раз.
Это значит что после прочтения строки я всего лишь пошлю команду SignalSemaphore(Semaphore), а в другом потоке буду ждать WaitSemaphore(Semaphore)?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 01, 2012 12:48 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11481
Благодарил (а): 4 раз.
Поблагодарили: 468 раз.
Да.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 01, 2012 12:50 pm 
Не в сети
лентяй ужасный
Аватар пользователя

Зарегистрирован: Вс фев 27, 2011 4:23 pm
Сообщений: 646
Благодарил (а): 4 раз.
Поблагодарили: 5 раз.
Спасибо.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт авг 30, 2012 10:43 am 
Не в сети
профессор

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
Никак не могу понять, как лучше сделать.
Есть 5 потоков, в которых с интервалом 500мс запускается одна и та же функция Y(), которая обрабатывает разные данные. В этой функции, в разное время(зависит от обработанных данных), запускается еще одна функция X(), в которой выводится сообщение в textgadget пользователю и ждет подтверждение от него.
Так вот, как приостановить выполнение потоков перед вызовом этой функции X(), если какой-то поток уже эту функцию вызвал и ждет подтверждение от пользователя?
Пробовал сделать через глобальную переменную, и в цикле ожидать когда она изменится, но так работает как-то криво.
Может есть более правильное решение?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт авг 30, 2012 11:00 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11481
Благодарил (а): 4 раз.
Поблагодарили: 468 раз.
MrF писал(а):
Так вот, как приостановить выполнение потоков перед вызовом этой функции X()
PauseThread(), не?

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт авг 30, 2012 1:40 pm 
Не в сети
профессор

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
Не, тут скорей всего подойдет LockMutex(Mutex) UnlockMutex(Mutex).


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс ноя 25, 2012 10:52 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11481
Благодарил (а): 4 раз.
Поблагодарили: 468 раз.
Вот смотрите, на первый взгляд вполне нормальный код, без ошибок.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
Procedure Thread(*x)
  If OpenWindow(0, 0, 0, 270, 160, "TextGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    TextGadget(0, 10,  10, 250, 20, "TextGadget Standard (Left)")
    TextGadget(1, 10,  70, 250, 20, "TextGadget Center", #PB_Text_Center)
    TextGadget(2, 10,  40, 250, 20, "TextGadget Right", #PB_Text_Right)
    TextGadget(3, 10, 100, 250, 20, "TextGadget Border", #PB_Text_Border)
    TextGadget(4, 10, 130, 250, 20, "TextGadget Center + Border", #PB_Text_Center|#PB_Text_Border)
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf
EndProcedure
 
CreateThread(@Thread(), 0)
MessageRequester("","")

Запустите его скажем, в версии 4.61 и он будет нормально работать.
А теперь сделайте тоже самое в 5.00 и будет облом. :shock: :?

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс ноя 25, 2012 12:30 pm 
Не в сети
PureBasic Coder
Аватар пользователя

Зарегистрирован: Чт ноя 10, 2011 10:50 am
Сообщений: 4049
Откуда: Ростов-на-Дону
Благодарил (а): 71 раз.
Поблагодарили: 81 раз.
Пункты репутации: 24
Пётр, а пурик 5.00 где взял?

_________________
Пурик - лучший язык программирования


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс ноя 25, 2012 2:32 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11481
Благодарил (а): 4 раз.
Поблагодарили: 468 раз.
Никита Однороб писал(а):
пурик 5.00 где взял
Тут.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс дек 09, 2012 8:57 am 
Не в сети
профессор

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
Код:
1
2
3
4
5
6
7
8
 
 WSAStartup_($202, @wsaData)
 
Procedure test(*x)
  Debug "test 1"
EndProcedure
 
CreateThread(@test(), 0)



Почему при использовании WSAStartup_ и при включенном threadsafe падает поток?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс дек 09, 2012 10:32 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11481
Благодарил (а): 4 раз.
Поблагодарили: 468 раз.
MrF, включи purifier и он укажет на ошибку в строке с WSAStartup_() сославшись на запись за пределами переменной.
После этого посмотри описание WSAStartup_() http://msdn.microsoft.com/en-us/library ... 13(v=vs.85).aspx
Что функция принимает во втором аргументе? А что ты ей передаешь?

Так работает и ничего не падает.
Код:
1
2
3
4
5
6
7
 WSAStartup_($202, @wsaData.WSADATA) 
 
 Procedure test(*x)
   Debug "test 1"
 EndProcedure
 
 CreateThread(@test(), 0)


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс дек 09, 2012 12:50 pm 
Не в сети
профессор

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
Пётр, точно, проглядел я второй аргумент. Спасибо.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт дек 11, 2012 12:19 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вс ноя 07, 2010 12:19 pm
Сообщений: 281
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
По сабжу я бы посоветовал изучить мультизадачность и в частности опенсурсный нт-шедулер, но к сожалению тут форум не по сискоденгу. Это значит что понимание маханизма свопированья не обязательно. Хотя это пичально.

_________________
Materia Lucida


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт дек 11, 2012 6:50 am 
Не в сети
PureBasic Coder
Аватар пользователя

Зарегистрирован: Чт ноя 10, 2011 10:50 am
Сообщений: 4049
Откуда: Ростов-на-Дону
Благодарил (а): 71 раз.
Поблагодарили: 81 раз.
Пункты репутации: 24
Инди, а можно попроще объяснить? Лично я не фига не понял :oops: :P :oops:

_________________
Пурик - лучший язык программирования


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Многопоточность - вопросы
СообщениеДобавлено: Вс ноя 29, 2015 3:27 am 
Не в сети
ассистент

Зарегистрирован: Пт май 15, 2015 5:16 am
Сообщений: 23
Благодарил (а): 11 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Стал использовать многопоточность. Возникают вопросы:
1. Могут ли начинаться проблемы, если в потоках только читать глобальные переменные, массивы, списки и т.д., не блокируя мьютексом?
Под проблемами подразумеваются конфликты в программе, ошибки, вылеты, а не то что прочитаны будут "устаревшие" данные.
2. Вопрос, подобный первому, но про чтение в потоке без лока мьютексом из выделенной (командой AllocateMemory) области памяти.
3. Что происходит, если в то самое мгновение когда мы читаем (без блоков мьютексом) в потоке данные из переменной или области памяти, эти данные обновляются в основной программе?


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 140 ]  На страницу Пред.  1 ... 3, 4, 5, 6, 7, 8, 9, 10  След.

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


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


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

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