Вопросы с тегами [multithreading]

1

голосов
2

ответ
546

Просмотры

Многопоточность пинг внутри BASH скрипта

Я имел взгляд вокруг здесь и там, кажется, только один вопрос, поднятый в отношении к многопоточности пинга внутри среды BASH. Код данных = $ (/ DEV / нуль и эхо $ линия достижима || эхо $ линия вниз сделана Вопрос в том, что он перебирает в IP-адрес диапазон внутри файла и отчетов все IP-адрес, достижимо, когда на самом деле только 3 из / 24 достижимы ... Я пытался замедлить сканирование вниз, добавляя -W 1 к пингу, но это приводит к некачественной производительности и требует использования многопоточности
Danny Watson
1

голосов
2

ответ
860

Просмотры

что лучше практик, чтобы получать сообщения из нескольких тематических разделов Кафки?

Мне нужно потребительские сообщения из различных тем Кафки, Должен ли я создать другой экземпляр потребителя за тему, а затем начать новую обработку резьбы в соответствии с количеством разделов. или я должен подписаться все темы от одного экземпляра потребителей и должны начать разные технологические потоки Благодарности и пожелания, MEGHA
Megha
1

голосов
2

ответ
57

Просмотры

Путаница между подсчетом петель и количеством нитей и запросом в отношении продолжительности жизни нити

В чем разница между 2 ниже сценариев и это будет иметь подобное влияние на производительность? Что будет задержка между запросами в сценарии 2? Будут ли все нити остаются живыми в сценарии 2? Я знаю о том, что нить имитируется пользователь и цикл подсчет означает количество раз, поток будет сделать запрос. Сценарий 1: Если число нитей 10, время разгона 10 и счетчик цикла равен 1. Сценарий 2: Если число нитей равно 1, время разгона 1 и счетчик цикла составляет 10.
user2044296
1

голосов
3

ответ
58

Просмотры

Неопределенный задача ExecutorService

У меня есть следующие переменные: частный ExecutorService исполнитель; частные задачи работника; У меня есть задача, которая должна быть выполнена в другом потоке, и состоянии которых должно контролироваться: общественный деятель updateTemplateBuffer () {работник = новый Task () {защищенного @Override Логического вызов () бросает исключение {// код задачи}; executor.execute (рабочий); вернуть работнику; } Задание выполнено правильно, но я не могу отслеживать, закончилась ли задача или нет. Методы executor.isTerminated () и executor.isShutdown () всегда ложно в любое время вызова. Скажите мне, как отслеживать состояние задачи правильно (начато или завершено), потому что я никогда не сталкивался с многопоточного программирования раньше.
A1ex NS
1

голосов
2

ответ
37

Просмотры

Ждите и Notify себя не так, как ожидалось, поток становится повешен

Ниже приведен пример кода: Тема становится повешен после употребления 5 или 6 значений я не знаю, где я отсутствует anything.And еще одно сомнение, что у меня было о вызове конструктора класса MyIncrementor. Сначала я пытался позвонить получить и установить в производителей и потребителей класса, создавая новый объект класса MyIncrementor, он не работает слишком / ** * * / пакет multithreadingDemo; / ** * @author Aquib * * / общественного класса ThreadCommDemo {/ ** * @param Args * @throws InterruptedException * / государственной статической силы основных (String [] арг) бросает InterruptedException {// TODO Auto-сгенерированные метод заглушек MyIncrementor мили = новый MyIncrementor (); Producer1 р = новый Producer1 (ми); Consumerrs с = новые Consumerrs (ми); Тема t1 = новая тема (р); Thread t2 = новая тема (с); t1.start (); t2.start (); }} Класс MyIncrementor {INT myCount; булево valueSet; / ** * @return в myCount * / общественного синхронизируется INT getMyCount () {если (valueSet!) {Попробуйте {ждать (); } Задвижка (InterruptedException е) {// TODO автоматической генерации улов блок e.printStackTrace (); }} System.out.println ( "получить" + myCount); valueSet = TRUE; notifyAll (); вернуться myCount; } / ** * @param myCount * myCount установить * / общественного синхронизированный недействительным setMyCount (INT myCount) {если (valueSet) {попробуйте {ждать (); } Задвижка (InterruptedException е) {// TODO автоматической генерации улов блок e.printStackTrace (); }} System.out.println ( "Установить" + myCount); this.myCount = myCount; valueSet = FALSE; notifyAll (); }} Класс Producer1 реализует Runnable {MyIncrementor миль; общественного Producer1 (MyIncrementor мили) {// TODO Авто-конструктор генерируется заглушка this.mi = т; } Общественного недействительными запуска () {для (INT = 1; г <10; я ++) {mi.setMyCount (I); System.out.println ( "Произведено" + mi.myCount); попробуйте {Thread.currentThread () сон ((INT) (Math.random () * 100)). } Задвижка (т.е. InterruptedException) {т.е.. printStackTrace (); }}}} Класс Consumerrs реализует Runnable {MyIncrementor миль; общественного Consumerrs (MyIncrementor мили) {// TODO Авто-конструктор генерируется заглушка this.mi = т; } Общественного недействительными запуска () {для (INT = 1; г <10; я ++) {INT = Val mi.getMyCount (); System.out.println ( "потребленное" + вал); }}}
Aquib Javed
1

голосов
2

ответ
89

Просмотры

C ++ проходя зЬй :: функции с пользовательским объектом в качестве аргумента в резьбе

У меня есть отдельный класс для обработки резьбы, и существует функция необходима для создания потока и повторить функцию для определенного интервала ничтожной timer_start_custom (станд :: функции FUNC, строки файла, строки и lastline, вектор & Dict, беззнаковое целочисленное значение интервала) { станд :: нить ([FUNC, интервал, имя файла, lastline, ДИКТ] () {в то время (правда) {автоматического х = станд :: хроно :: steady_clock :: сейчас () + станд :: хроно :: миллисекунды (интервал) ; FUNC (имя файла, lastline, ДИКТ); станд :: this_thread :: sleep_until (х);}}) отсоединить (). } Однако, сейчас компилятор compain: Нет функции соответствия для вызова объекта типа «Const станд :: функция» (он же «сопзЬ функции») Я знаю, что если место функция в том же файле, то я могу пропустить FUNC в качестве параметра,
Edison Lo
1

голосов
1

ответ
30

Просмотры

Что пустышки в threading.current_thread ()?

Я пытаюсь понять код в это Как правильно использовать QThread в PyQt с moveToThread ()? Часть, которая имеет: mainwin .__ init__: MainThread, 140221684574016, GenericWorker .__ init__: MainThread, 140221684574016, GenericWorker.run: пустышки-1, 140221265458944, mainwin.addBatch: пустышки-1, 140221265458944, mainwin.add: пустышки-1, 140221265458944 , mainwin.add: пустышки-1, 140221265458944, mainwin.add: пустышки-1, 140221265458944, mainwin.add: пустышки-1, 140221265458944, mainwin.add: пустышки-1, 140221265458944, mainwin.add: пустышки-1, 140221265458944 представляет интерес для меня, какой манекен -1 элементов точно, я понимаю, что эти рабочие потоки делает работу, но они остаются «живыми» навсегда? или они будут мусора самостоятельно. Если добавить партии было сделано 10k раз будет выходной код имеет 10k пустышки-1 элементов? Я спрашиваю только потому, что я видел подобный вывод при использовании подклассов объектов QThread (используя Pydev в Eclispe во время выполнения кода в режиме отладки). Я не уверен, если это означает, что какое-то утечки (утечка нити), что в конечном итоге потребляет много и много ресурсов.
Man Wa kileleshwa
1

голосов
0

ответ
277

Просмотры

POSIX spawn.h and /sys/wait.h on Visual Studio Windows platform

Это похоже на вопрос в очень старой нити (7-летняя нить) доступна здесь: не может получить код для запуска из программирования книги (C ++) (Так, вместо постановки этого вопроса есть, я хотел отправить в новый поток.) ​​По существу, следующий код из книги Professional Мультикор программирования не компилируется, так как файлы заголовков spawn.h и SYS / wait.h отсутствуют. используя патезрас; # include # include # include # include INT основных (INT ARGC, символ * ARGV [], символ * envp []) {pid_t ChildProcess; pid_t ChildProcess2; INT RetCode1; INT RetCode2; INT Значение; RetCode1 = posix_spawn (& ChildProcess, "find_code", NULL, NULL, ARGV, envp); RetCode2 = posix_spawn (& ChildProcess2, "find_code", NULL, NULL, ARGV, envp); Подождите(& Значение); ждать (& Value); Возвращение (0); } Принятый ответ на эту нить предполагает загрузку пакета PTHREAD отсюда. Тем не менее, даже эта установка не поставляется с spawn.h или SYS / wait.h. Единственные файлы заголовков в установке являются pthread.h, sched.h и semaphore.h. Нет упоминания о spawn.h или SYS / wait.h. Есть ли способ, чтобы получить код для запуска на Windows, Visual Studio? Я уже пытался делать поиск Google для этих недостающих файлов заголовков, а лишь общие замечания о том, что этот файл должен сделать вокруг. Например, следующая страница. Нет упоминания о spawn.h или SYS / wait.h. Есть ли способ, чтобы получить код для запуска на Windows, Visual Studio? Я уже пытался делать поиск Google для этих недостающих файлов заголовков, а лишь общие замечания о том, что этот файл должен сделать вокруг. Например, следующая страница. Нет упоминания о spawn.h или SYS / wait.h. Есть ли способ, чтобы получить код для запуска на Windows, Visual Studio? Я уже пытался делать поиск Google для этих недостающих файлов заголовков, а лишь общие замечания о том, что этот файл должен сделать вокруг. Например, следующая страница.
Tryer
1

голосов
0

ответ
81

Просмотры

C ++ асинхронный: как перетасовать вектор в многопоточном контексте?

Запуск многопоточной программы, я заметил, что программа работает быстрее, используя 1 поток по сравнению с 4-х потоков, несмотря на процессор, имеющий 4 ядра. После расследования, я обнаружил, что проблема возникает только тогда, когда перетасовки что-то. Ниже минимальной программы я создал, чтобы воспроизвести проблему: #include #include #include #include #include #include #define NB_JOBS 5000,0 #define MAX_CORES 8 статических Ий _no_shuffle (INT nb_jobs) {Ьоо б = false; для (INT I = 0; я
Vince
1

голосов
0

ответ
157

Просмотры

Is it possible to use IO.pipe for inter-thread communication in Ruby?

В примере рубин IO.pipe из документации, одно сообщение передается через процессы. Я хотел сделать что-то подобное, с двумя отличиями: использовать потоки вместо процессов использовать трубу для постоянного обмена сообщений, а не для сообщения разового Это является очевидным, но не рабочим код: сподите, сог = IO.pipe reader_thread = Thread.new (е) делать | е | data_received = rd.read ставит "Read: # {} data_received.inspect" конец write_thread = Thread.new (Wr) делать | WR | wr.write «Сообщение» write_thread.join reader_thread.join wr.flush конец, который вызывает reader_thread повесить на rd.read. Я мог бы сделать его работу с помощью IO # read_nonblock: reader_thread = Thread.new (е) делать | е | data_received = \ начинает rd.read_nonblock (100) спасательный IO :: WaitReadable, IO :: EAGAINWaitReadable IO.select ([е]) повторить конечные путы "
Marcus
1

голосов
0

ответ
237

Просмотры

Как Network I / O происходит в Node.js?

Я искал о Node.js внутреннего пула потоков для ввода / вывода и выяснили, что сеть I / O не использует потоки для запросов. 1) Тогда, что ставит крышку на пределе запроса сети переработанного асинхронно в моем сервере Node.js? Я пытаюсь использовать модуль кластера на моем окте основного процессора и буду использовать 8 раздвоенные экземпляры. Я просто хочу знать, что сколько сетевых запросов ввода / вывода на 3 партии Апи может обрабатывать каждый раздвоенный экземпляр! У меня есть такая интуиция, что запрошенные в настоящее время не может быть обработан в очереди в Somwhere! 2) Асинхронная работа как файл ввод / вывод использует пул потоков, как что обрабатываются с внутренней резьбой пулом фиксированного размера? Сколько запросов (в этом случае используются нити) слишком много?
Abhishek Yadav
1

голосов
1

ответ
308

Просмотры

Является ли Akka действительно решение для тупиковой ситуации?

Как Описанные здесь Хотя замки кажутся естественным средством поддерживать инкапсуляцию с несколькими потоками, на практике они являются неэффективными и легко привести к тупикам в любом применении в реальной мировом масштабе. Мой вопрос просто, Акка действительно решение для тупиковой ситуации. Я знаю, что до тех пор, как Akka актеры рассматривать объекты как полностью развязаны, что код не соответствует сценарию тупиковой. Но, в императивном программировании также мы можем просто отвязать их и запереть отдельно, не держа замок внутри другой замок, так что не будет сценарий тупиковый вообще в традиционной парадигмы программирования также. что реальный случай использования этого заявления? Есть ли у нас найти случай использования, что может привести к тупиковой сценарий в традиционном программировании, но предотвратить с помощью AKKA модели актера? PS Я очень новичок в Акку, но я могу понять, стек вызовов, общие вопросы памяти и многопоточности в традиционном программировании является очень дорогостоящими в современной компьютерной архитектуре и Акко является хорошим решением в исполнении мудрого. Но хотелось бы знать это специальное заявление также.
user2810472
1

голосов
1

ответ
72

Просмотры

Как закрыть сокет, который заперт в бесконечном цикле?

Я создал сервер-клиент проект, в котором сервер хранит прослушивания и выводит информацию. Однако, когда я выключение клиента, сервер остается открытым. Проблема заключается в том, что мне нужно вставить это в другое приложение, и, если сервер не закрывает на первый, приложение не будет открыта, если я убить процесс в этом порту (но это не вариант для меня). Что я должен сделать, чтобы правильно закрыть сервер после того, как клиент отключается? Вот код: Сервер: общественный класс Сервер {государственной статической силы основных (String [] арг) {Connection сопп = новое соединение (); Новая тема (Conn) .start (); } Частный статический Connection класс реализует Runnable {@Override общественного недействительными запуска () {попробуйте (ServerSocket ServerSocket = новый ServerSocket (5005)) {Оправа = ServerSocket. принимать (); Слушатель (розетка); } Поймать (IOException ех) {ex.printStackTrace (); }} Частная пустота слушатель (гнездо) бросает IOException {DataOutputStream OutputStream = новый DataOutputStream (socket.getOutputStream ()); DataInputStream InputStream = новый DataInputStream (socket.getInputStream ()); булева жив = истина; в то время как (живой) {попытка {outputStream.writeUTF (новый сканер (System.in) .nextLine ()); System.out.println (inputStream.readUTF ()); } Поймать (IOException ех) {ex.printStackTrace (); живой = ложь; }}}}} Клиент: открытый класс клиента {государственной статической силы основных (String [] арг) {попробуйте (Оправа = новое гнездо ( "локальный", 5005)) {DataInputStream InputStream = новый DataInputStream (socket.getInputStream ()); DataOutputStream OutputStream = новый DataOutputStream (socket.getOutputStream ()); в то время как (socket.isConnected ()) {System.out.println ( "Поступающие данные:" + inputStream.readUTF ()); outputStream.writeUTF (новый сканер (System.in) .nextLine ()); outputStream.flush (); }} Поймать (IOException ех) {ex.printStackTrace (); }}} Так как в настоящее время, большое спасибо! getInputStream ()); DataOutputStream OutputStream = новый DataOutputStream (socket.getOutputStream ()); в то время как (socket.isConnected ()) {System.out.println ( "Поступающие данные:" + inputStream.readUTF ()); outputStream.writeUTF (новый сканер (System.in) .nextLine ()); outputStream.flush (); }} Поймать (IOException ех) {ex.printStackTrace (); }}} Так как в настоящее время, большое спасибо! getInputStream ()); DataOutputStream OutputStream = новый DataOutputStream (socket.getOutputStream ()); в то время как (socket.isConnected ()) {System.out.println ( "Поступающие данные:" + inputStream.readUTF ()); outputStream.writeUTF (новый сканер (System.in) .nextLine ()); outputStream.flush (); }} Поймать (IOException ех) {ex.printStackTrace (); }}} Так как в настоящее время, большое спасибо! }} Поймать (IOException ех) {ex.printStackTrace (); }}} Так как в настоящее время, большое спасибо! }} Поймать (IOException ех) {ex.printStackTrace (); }}} Так как в настоящее время, большое спасибо!
André Spironello
1

голосов
0

ответ
41

Просмотры

NodeJS: Удалить фьючерсные бегущий нить, чтобы сделать новые

Я работаю с унаследованным кодом, написанным на Nodejs. Существует класс планировщика, который принимает функции в качестве входных данных и запускает поток, завернутый в будущем. Const т = threads.spawn (п); future_ary.push (futures.newFuture (т)); Где фьючерсы просто класс обертки, который делает некоторые бухгалтерский учет и создает будущее, используя эту библиотеку узла. На последующем вызов планировщика с новыми функциями, его нужно удалить старую фьючерсные запущенную эти потоки и сделать новые. Тем не менее, я не могу удалить старые. Так что мой планировщик только порождает новые и старые фьючерсы и нить только задерживаться, пока я не остановить родительский процесс. Так как я могу удалить эти старые фьючерсы, чтобы освободить место для новых?
danny
1

голосов
0

ответ
186

Просмотры

FreeTTS - несколько голосов сразу

В настоящее время я пишу приложение Java (чат приложения), которое требует ввода текста в речь. После поиска в Интернете на некоторое время я узнал, что FreeTTS это хороший вариант, мне удалось заставить его работать, и он в настоящее время не позволяет основной поток пользовательского интерфейса от блокирования, как я бегу его в потоке. Единственная проблема в том, что FreeTTS только позволяет один голос говорить сразу (даже если они находятся в нескольких потоках, как несколько экземпляров). Есть ли способ, я могу обойти это и есть знают несколько пользователей одновременно? Это мой код у меня до сих пор. импорт lombok.extern.slf4j.Slf4j; импорт java.beans.PropertyVetoException; импорт java.util.Locale; импорт java.util.Random; импорт java.util.logging.Level; импорт java.util.logging.Logger; импорт javax.speech.AudioException; импорт javax.speech.Central; импорт javax.speech.EngineException; импорт javax.speech.EngineStateError; импорт javax.speech.synthesis.Synthesizer; импорт javax.speech.synthesis.SynthesizerModeDesc; импорт javax.speech.synthesis.Voice; @ SLF4J общественного перечисление Speech реализует SpeechAgent {Instance; частный статический случайный пул = новый Random (); частный статический Synthesizer createSynthesizer () {попробуйте {System.setProperty ( "freetts.voices", "com.sun.speech.freetts.en.us.cmu_us_kal.KevinVoiceDirectory"); SynthesizerModeDesc убывание = новый SynthesizerModeDesc (Locale.US); Central.registerEngineCentral ( "com.sun.speech.freetts.jsapi.FreeTTSEngineCentral"); Синтезатор синтезатор = Central.createSynthesizer (по убыванию); synthesizer.allocate (); synthesizer.resume (); Голос [] голос = NULL; . В то время как (голос == NULL) {голос = ((SynthesizerModeDesc) synthesizer.getEngineModeDesc ()) getVoices (); } synthesizer.getSynthesizerProperties () setVoice (голос [pool.nextInt (voices.length)]).; вернуть синтезатор; } Задвижка (Исключение е) {log.error (String.Format ( "Не удалось загрузить синтезатор:% S", e.toString ())); } Возвращать нуль; } Недействительным говорить общественности (вход String) {новый Thread (новый Runnable () {общественного недействительными запуска () {Синтезатор синтезатор = createSynthesizer (); если (синтезатор == NULL) {возвращение} synthesizer.speakPlainText (input.replaceAll (» [^ A-Za-Z] +», ""), NULL);.}}) начать ();
Paradoxis
1

голосов
0

ответ
107

Просмотры

HashMap с станд :: будущее как ключ

Так как мы не можем получить аргументы из Std :: будущего, я пытаюсь поддерживать отображение между стандом :: будущим и стандом :: строкой. Следующее утверждение: станд :: unordered_map карта не выдает следующее сообщение об ошибке: ошибка: не подходит для вызова '(Уст станд :: хэш) (сопзЬ станд :: Будущее &)' │ = • noexcept (declval () (declval () ))> Как я могу решить эту проблему?
UnderWood
1

голосов
0

ответ
338

Просмотры

Python threading error, can't run script

Я не знаю, почему, но я получаю сообщение об ошибке при попытке запустить одну из моих программ питона. Это простой скрипт, как я пытался понять, как работает многопоточность. Это код, я использую для примера: импорт потоковой импорты времени Защиты MyFunction (): печать ( «Начать нить») time.sleep (3) печать ( «Конец нити») нить = [] для ввода в диапазоне (5): #thread объект поток = threading.Thread (цель = MyFunction) Thread.start threads.append (резьба) для резьбы в резьбе: Thread.join () И это ошибка я получаю после выполнения сценария: Traceback (самый последний вызов последнего): Файл "blue.py", строка 13, в потоке = threading.Thread (цель = MyFunction) AttributeError: 'модуль' объект не имеет атрибута 'тема' Exception AttributeError: « 'модуль'
otterdog
1

голосов
1

ответ
121

Просмотры

Остановка Основная тема с MessageBox

Я запрос к базе данных на отдельный поток и создать MessageBox для пользователя. Я хочу, чтобы пользователь, чтобы остановить то, что он делает, и отвечать на MessageBox. С моим кодом ниже, окно сообщения оленья кожа даже всплывают поверх текущего окна. Пользователю необходимо нажать на панели задач, чтобы увидеть его. Как я могу получить его, чтобы прервать основной поток? Dim Кнопка = значок MessageBoxButton.YesNo Dim = MessageBoxImage.Information дим результат = MessageBox.Show ( "Привет", "Title", кнопка, иконка) Select Case результат Case MessageBoxResult.Yes queryInProgress = 0 cashTransfer.TransactionApproved = 1 Case MessageBoxResult.No queryInProgress = 0 cashTransfer.TransactionApproved = 0 End Select
user9199295
1

голосов
0

ответ
53

Просмотры

FreeBSD + multithreaded python = *intermittent* failures to return from function [Ryzen incompatibility?]

[UPDATED: 'fix' is disable SMT in BIOS; i.e. something very ugly is going on: FreeBSD vs Ryzen] This one has me scratching my head. The following code intermittently fails on FreeBSD 11.1 + python 3.6.4 + postgresql 10.1 + Ryzen 1600x. This is all happening inside of a Flask app, but I do not think that that is relevant. The problem does not occur with this code with macOS + python 3.6.4 + postgresql 10.1. The code does not seem to fail ever if workers = 5. It will take < 20 tries to induce a failure. Success will yield the list of finds, of course. You will also see a copy of finished search for every worker: 4x, 6x, 10x, ... You will also see a single RETURNED FROM SEARCH. Failure means you never get the list returned. But you will see a copy of finished search for every worker: 4x, 6x, 10x, ... And so workonsearch() really does seem to have completely finished. Nevertheless you will not see RETURNED FROM SEARCH as the result returns to threadedsearcher() A stripped down version of the code in question: def threadedsearcher(searchobject): managedlistoffinds = manager.list() searchlist = manager.list(searchobject.tosearch) workers = 6 jobs = [Process(target=workonsearch, args=(managedlistoffinds, searchlist, lookingfor)) for i in range(workers)] for j in jobs: j.start() for j in jobs: j.join() print('RETURNED FROM SEARCH') return managedlistoffinds def workonsearch(managedlistoffinds, searchlist, lookingfor): dbconnection = setconnection() curs = dbconnection.cursor() so = searchobject while searchlist: try: table = searchlist.pop() except IndexError: table = None searchlist = None if table: newfinds = mysearch(lookingfor, table) managedlistoffinds += newfinds dbconnection.commit() curs.close() print('finished search') return managedlistoffinds
user8241626
1

голосов
0

ответ
154

Просмотры

Странное поведение SerialPort.DataReceived

Я не могу понять, что делает мой SerialPort.DataReceived обработчик события ... Она срабатывает, когда нет данных, посланных моего контроллер, и только в очень конкретном случае. частная пустота serialPort1_DataReceived (объект отправитель, SerialDataReceivedEventArgs е) {// Вызвать весь код в другом методе, чтобы включить GUI обновления от подтемы если (this.InvokeRequired) {this.Invoke ((MethodInvoker) (() => OnDataReceived (отправитель, е) )); } Еще {OnDataReceived (отправитель, д); }} Частная пустота OnDataReceived (объект отправителя, SerialDataReceivedEventArgs е) {// скопировать данные из буфера и SERIAL DISPLAY SerialPort Spl = (SerialPort) отправителя; байт [] ЬиЕ = новый байт [spL.BytesToRead]; Console.WriteLine ( "DATA ПОЛУЧИЛИ!"); spL.Read (BUF, 0, buf.Length); Еогеасп (Байт б в BUF) {Console.Write (b.ToString () + ",«); } Console.WriteLine (); //Console.WriteLine(BitConverter.ToString(buf, 0, buf.Length)); // шестнадцатеричной переключатель (BUF [0]) {случай ОБЩ: если (next_op == rdGEN) // если требуется Общие данные, декодировать его {DecodeGEN (BUF); } перерыв; Случай БАС: если (next_op == rdSingle || next_op == RDAll) // если БАС или все запрашиваемые данные, декодирует БАС (и по-прежнему, если все) {DecodeBAS (ЬиЙ); } Иначе, если (next_op == wrSingle || next_op == wrAll) // если БАВ или все данные, записанные, ответ декодирования BAS (и по-прежнему, если все) {DecodeBASerr (BUF); } перерыв; случай PAS: если (next_op == rdSingle || next_op == RDAll) // если PAS или все запрашиваемые данные, декодирует PAS (и продолжать, если все) {DecodePAS (БУФЫ); } Иначе, если (next_op == wrSingle || next_op == wrAll); // если ПАС или все данные, записанные, реакция декодирования ПАС (и по-прежнему, если все) {DecodePASerr (BUF); } перерыв; Случай THR: если (next_op == rdSingle || next_op == RDAll) // если THR или все запрашиваемые данные, декодировать Thr (и отбросить дополнительные данные) {DecodeTHR (BUF); } Иначе, если (next_op == wrSingle || next_op == wrAll) // если THR или все данные, записанные, реакция декодирования Thr (и отбросить дополнительные данные) {DecodeTHRerr (BUF); } перерыв; }} В принципе я получить последовательность байтов, отправленных из моего контроллера, а затем я расшифровать их, чтобы обновить элементы управления с графическим интерфейсом. Это пример: 82 24 41 18 0 15 26 35 50 60 70 80 90 100 0 80 85 90 100 100 100 100 100 100 54 1 43 ПОЛУЧЕННЫЕ ДАННЫЕ! Сумасшедшая странно то, что в единственном и очень конкретном случае, когда мой массив байт содержит номер «26», как [6] элемента, то serialPort1_DataReceived вызывается дополнительное время, и в основном моя программа аварии при включении Buf [0] инструкция так буфер пуст https://i.imgur.com/5iZd0lj.png. Странно то, что DataReceived событие не должно даже быть вызвана с не передается никаких данных! Я судимый все принятых значения для моей программы от 0 до 100, и только «26» вызывает это странное поведение, и это не имеет никакого смысла для меня ...
UnlimitedSlime
1

голосов
1

ответ
218

Просмотры

HTTP Request Handler Connection Reset Error

Я описываю простой обработчик запросов HTTP, но хранится случайно встретив соединения Сброс ошибок при передаче файлов на клиентский браузер. Поскольку моя программа довольно велика, я упрощу коды немного ниже: общественный класс HTTPRequestHandler реализует Runnable {запросов частной очереди; частный летучий логический флаг; ... общественного недействительного запуск () {флаг = истина; в то время как (флаг) {HTTPRequest запроса = NULL; синхронизированы (это) {если (requests.size> 0) {Запрос = requests.removeFirst (); }} Если (запрос! = NULL) {handleRequest (запрос); }}} ... частная пустота handleRequest (HTTPRequest запрос) {... .. Стараешься {// Отправить HTTP Header request.getSocket () getOutputStream () писать (. Message.getHeader () GetBytes ()); // Отправить HTTP Message Body Object messageBody = message.getMessageBody (); если (messageBody = NULL && messageBody.getClass () == File.class!) {Files.copy (((File) messageBody) .toPath (), request.getSocket () getOutputStream ().); .. Request.getSocket () getOutputStream () заподлицо (); } Еще если (messageBody! = NULL) {...}} поймать (IOException е) {// TODO Auto-порожденных поймать блок e.printStackTrace (); } ...} Я был в состоянии получить эту часть, чтобы работать в большинстве случаев (не всегда) на различных браузерах на локальном компьютере, но он никогда не работает вообще на удаленной машине. Это происходит случайным образом в основном для больших файлов, а иногда и для маленьких файлов, а также. Что касается заголовка HTTP, я в настоящее время программа закрывает соединение после каждого полного ответа.
Ice Drake
1

голосов
1

ответ
162

Просмотры

USB Вспомогательное оборудование не поддерживает связь после перезагрузки

Я пытаюсь понять, почему мое приложение не запускается связь с USB-аксессуар после перезагрузки телефона. Если я отключаю кабель и подключить его обратно, связь возобновляется. Приложение ориентированно на Android API 19. На установке приложения я поставил его, чтобы всегда быть Главной приложение, и когда я первый подключить его к аксессуару я проверяю коробку, чтобы всегда разрешать доступ к текущему аксессуара. Поэтому, когда я перезагрузить телефон, приложение открывается автоматически, она проходит через этапы проверки разрешения (usbmanager.hasPermission), и это на самом деле имеет разрешения без каких-либо предупреждений появляется, но связь не начиная OpenAccessory методы. Manifest: Комм: // инициализация USB менеджер usbmanager = (UsbManager) context.getSystemService (Context.USB_SERVICE); mPermissionIntent = PendingIntent.getBroadcast (контекст, 0, новое Намерение (ACTION_USB_PERMISSION), 0); IntentFilter фильтр = новый IntentFilter (ACTION_USB_PERMISSION); filter.addAction (UsbManager.ACTION_USB_ACCESSORY_DETACHED); context.registerReceiver (mUsbReceiver, фильтр); // Резюме Аксессуар если (usbmanager.hasPermission (аксессуар)) {OpenAccessory (принадлежность); } Еще {синхронизирована (mUsbReceiver) {если (! MPermissionRequestPending) {Toast.makeText (global_context, "Запрос USB Разрешение", Toast.LENGTH_SHORT) .show (); usbmanager.requestPermission (аксессуар, mPermissionIntent); mPermissionRequestPending = TRUE; }}} // Broadcast Receiver частный окончательный BroadcastReceiver mUsbReceiver = новый BroadcastReceiver () {@Override общественного недействительными OnReceive (контекст Контекст, Намерение Намерение) {Строка действия = intent.getAction (); если (ACTION_USB_PERMISSION.equals (действие)) {синхронизированы (это) {UsbAccessory аксессуар = (UsbAccessory) intent.getParcelableExtra (UsbManager.EXTRA_ACCESSORY); если (intent.getBooleanExtra (UsbManager.EXTRA_PERMISSION_GRANTED, ложь)) {Toast.makeText (global_context, "Разрешить USB разрешение", Toast.LENGTH_SHORT) .show (); OpenAccessory (принадлежность); } Еще {Toast.makeText (global_context, "Запретить USB разрешение", Toast.LENGTH_SHORT) .show (); Log.d ( "LED", "разрешение отказано принадлежности" + принадлежности); } MPermissionRequestPending = ложь; }} Еще если (UsbManager.ACTION_USB_ACCESSORY_DETACHED.equals (действие)) {DestroyAccessory (истина); // CloseAccessory (); } Еще {Log.d ( "LED", "...."); }}}; // OpenAccessory частная пустота OpenAccessory (UsbAccessory принадлежность) {FileDescriptor = usbmanager.openAccessory (принадлежность); если (FileDescriptor! = NULL) {usbaccessory = аксессуар; FileDescriptor FD = filedescriptor.getFileDescriptor (); InputStream = новый FileInputStream (FD); OutputStream = новый FileOutputStream (FD); / * Проверить, если любой из них равны нулю * / если (InputStream == NULL || OutputStream == NULL) {возвращение; } Если (READ_ENABLE == FALSE) {READ_ENABLE = TRUE; readThread = новый read_thread (InputStream); readThread.start (); } // Инициализировать последовательный порт здесь SerialComm.getInstance () initPort (). }} OutputStream = новый FileOutputStream (FD); / * Проверить, если любой из них равны нулю * / если (InputStream == NULL || OutputStream == NULL) {возвращение; } Если (READ_ENABLE == FALSE) {READ_ENABLE = TRUE; readThread = новый read_thread (InputStream); readThread.start (); } // Инициализировать последовательный порт здесь SerialComm.getInstance () initPort (). }} OutputStream = новый FileOutputStream (FD); / * Проверить, если любой из них равны нулю * / если (InputStream == NULL || OutputStream == NULL) {возвращение; } Если (READ_ENABLE == FALSE) {READ_ENABLE = TRUE; readThread = новый read_thread (InputStream); readThread.start (); } // Инициализировать последовательный порт здесь SerialComm.getInstance () initPort (). }} } // Инициализировать последовательный порт здесь SerialComm.getInstance () initPort (). }} } // Инициализировать последовательный порт здесь SerialComm.getInstance () initPort (). }}
Macaret
1

голосов
2

ответ
145

Просмотры

Многопоточный на глобальном, например C ++ в C ++ / обнулении

У меня есть класс с 2-мя методами сказать, Connect и Disconnect. Теперь, когда я называю класс B я получить адрес для использования, что я буду подключать и как только это будет сделано, я должен позвонить классу C, чтобы выполнить операцию отключения по этому же адресу. Я могу добиться этого, если я сделаю А * А как глобальная переменная. Но когда дело доходит до многопоточности и A является глобальным использую только один адрес / экземпляр и он отключился до других потоков были запущены вызывая нарушение прав доступа. Как решить эту проблему? Заранее спасибо. класс А () {Connect (); Отключить(); }; А * а = nullptr; класс В () {а = новый А (); a-> Connect (); } Класса C () {если a-> Disconnect () (а!); }
Edwin Vivek N
1

голосов
0

ответ
82

Просмотры

Ява Процесс не может получить доступ к файлу, так как он используется другим процессом

Я хочу зачитать файл на отдельном потоке и после того, что я хочу, чтобы переместить файл в новый каталог, но компилятор продолжает говорить мне, что я не могу переместить файл, так как он используется другим процессом. Я проверил это несколько раз, и мои читатели закрыты, и я использовал присоединиться к функции (), чтобы ждать, пока readThread не закончил то, что это может быть? общественный класс CallLogReader расширяет Thread {частный путь Path; частные callLogs LinkedList; общественный CallLogReader (путь Path) {setPath (путь); callLogs = новый LinkedList (); } Общественного путь GetPath () {путь возврата; } Пустота setPath (путь Путь) публичный {this.path = путь; } GetCallLogs общественные LinkedList () {вернуть callLogs; } @Override общественный недействительный запуска () {FileReader читатель = NULL; BufferedReader buffReader = NULL; попробуйте {читатель = новый FileReader (path.toFile ()); buffReader = новый BufferedReader (считыватель); Строка CurrentLine = buffReader.readLine (); в то время как (! CurrentLine = NULL) {String [] БлокиДанных = currentLine.split ( ";"); если (! БлокиДанный [7] .equals ( "ИГНОРИРУЙ")) {callLogs.add (новый CallLog (Integer.parseInt (БлокиДанный [0]), БлокиДанный [1], ConvertStringToDate (БлокиДанный [2], БлокиДанный [3]) , БлокиДанные [4], БлокиДанные [5], Integer.parseInt (БлокиДанный [6]), БлокиДанный [7])); } CurrentLine = buffReader.readLine (); }} Поймать (IOException ех) {System.out.println (ex.getMessage ()); } Наконец {{если попытаться (buffReader! = NULL) {buffReader.close (); } Если (читатель! = NULL) {reader.close (); }} Поймать (IOException ех) {System.out.println (ex.getMessage ()); }}} Частная LocalDateTime ConvertStringToDate (String DateString, String TimeString) {Строка dateTimeString = DateString + "" + TimeString; DateTimeFormatter форматировщик = DateTimeFormatter.ofPattern ( "дд / ММ / YYYY HH: мм: сс"); вернуть LocalDateTime.parse (dateTimeString, форматтер); } Общественного недействительными MoveFile () {Путь NEWPATH = Paths.get (path.getParent () GetParent () ToString () + "\\ обрабатываются \\" + path.getFileName ()..); попробуйте {Files.move (путь, NEWPATH, StandardCopyOption.REPLACE_EXISTING); } Поймать (IOException ех) {System.out.println (ex.getMessage ()); }} Государственной статической силы основных (String [] арг) {// TODO автоматическая генерация метод заглушки Путь path_1 = Paths.get ( "C: \\ Пользователи \\ 11601037 \\ \\ Desktop представляют ресурсы \\ в \\ testdata1. CSV "); CallLogReader reader_1 = новый CallLogReader (path_1); reader_1.run (); попробуйте {reader_1.join (); } Задвижка (InterruptedException ех) {System.out.println (ex.getMessage ()) ;; } Reader_1.moveFile (); System.out.println (.. Path_1.getParent () GetParent () ToString ()); }} } Поймать (IOException ех) {System.out.println (ex.getMessage ()); }} Государственной статической силы основных (String [] арг) {// TODO автоматическая генерация метод заглушки Путь path_1 = Paths.get ( "C: \\ Пользователи \\ 11601037 \\ \\ Desktop представляют ресурсы \\ в \\ testdata1. CSV "); CallLogReader reader_1 = новый CallLogReader (path_1); reader_1.run (); попробуйте {reader_1.join (); } Задвижка (InterruptedException ех) {System.out.println (ex.getMessage ()) ;; } Reader_1.moveFile (); System.out.println (.. Path_1.getParent () GetParent () ToString ()); }} } Поймать (IOException ех) {System.out.println (ex.getMessage ()); }} Государственной статической силы основных (String [] арг) {// TODO автоматическая генерация метод заглушки Путь path_1 = Paths.get ( "C: \\ Пользователи \\ 11601037 \\ \\ Desktop представляют ресурсы \\ в \\ testdata1. CSV "); CallLogReader reader_1 = новый CallLogReader (path_1); reader_1.run (); попробуйте {reader_1.join (); } Задвижка (InterruptedException ех) {System.out.println (ex.getMessage ()) ;; } Reader_1.moveFile (); System.out.println (.. Path_1.getParent () GetParent () ToString ()); }}
galiciath
1

голосов
0

ответ
66

Просмотры

Нет потоков с использованием Epoll

Скажем, у меня есть сервер приложений высокой производительности, которая работает 50 темы, где каждый из этих потоков прослушивает данных на 1000 розеток с использованием Epoll (). Когда некоторые данные поступают на сокете нить обрабатывает его. Предположим, что эта обработка очень очень быстро т.е. не блокирует много. В результате все 50 потоков может масштабироваться очень хорошо. Учитывая эту ситуацию, я слышал, что если бы я должен был пойти и уменьшить количество потоков до 5 (т.е. сделать 1/10) и увеличить сокеты на поток до 10000 (то есть сделать их в 10 раз), то система будет быстрее в целом, хотя количество соединений остается прежним. Я себе это происходит потому, что, когда количество потоков уменьшается на 1 / 10th число переключений контекста и шанс кэшей процессора получать черствый значительно уменьшается, что приводит к ускорения. Тем не мение, то, что мне интересно, если это действительно поможет. Я беспокоюсь о том, как другие потоки в системе вне данного приложения будут влиять на изображение. Я предполагаю, что все темы, независимо от того, в процессе которой они, конкурируют друг с другом для процессоров с точки планировщика зрения. Если общие потоки в системе в первом сценарии, где 1050 и после моего изменения они дошедшие до 1005, это не меняет много для всей системы. У вас еще есть примерно одинаковое количество потоков, конкурирующих за CPU. Так что в данном случае мое заявление не принесет пользы много. Мой вопрос это мое мышление правильно? Другими словами, когда вы говорите о количестве потоков в Epoll () приложение, вы не должны думать о полных потоков в системе не только приложения вы обеспокоены? м интересно, если это действительно поможет. Я беспокоюсь о том, как другие потоки в системе вне данного приложения будут влиять на изображение. Я предполагаю, что все темы, независимо от того, в процессе которой они, конкурируют друг с другом для процессоров с точки планировщика зрения. Если общие потоки в системе в первом сценарии, где 1050 и после моего изменения они дошедшие до 1005, это не меняет много для всей системы. У вас еще есть примерно одинаковое количество потоков, конкурирующих за CPU. Так что в данном случае мое заявление не принесет пользы много. Мой вопрос это мое мышление правильно? Другими словами, когда вы говорите о количестве потоков в Epoll () приложение, вы не должны думать о полных потоков в системе не только приложения вы обеспокоены? м интересно, если это действительно поможет. Я беспокоюсь о том, как другие потоки в системе вне данного приложения будут влиять на изображение. Я предполагаю, что все темы, независимо от того, в процессе которой они, конкурируют друг с другом для процессоров с точки планировщика зрения. Если общие потоки в системе в первом сценарии, где 1050 и после моего изменения они дошедшие до 1005, это не меняет много для всей системы. У вас еще есть примерно одинаковое количество потоков, конкурирующих за CPU. Так что в данном случае мое заявление не принесет пользы много. Мой вопрос это мое мышление правильно? Другими словами, когда вы говорите о количестве потоков в Epoll () приложение, вы не должны думать о полных потоков в системе не только приложения вы обеспокоены? Я беспокоюсь о том, как другие потоки в системе вне данного приложения будут влиять на изображение. Я предполагаю, что все темы, независимо от того, в процессе которой они, конкурируют друг с другом для процессоров с точки планировщика зрения. Если общие потоки в системе в первом сценарии, где 1050 и после моего изменения они дошедшие до 1005, это не меняет много для всей системы. У вас еще есть примерно одинаковое количество потоков, конкурирующих за CPU. Так что в данном случае мое заявление не принесет пользы много. Мой вопрос это мое мышление правильно? Другими словами, когда вы говорите о количестве потоков в Epoll () приложение, вы не должны думать о полных потоков в системе не только приложения вы обеспокоены? Я беспокоюсь о том, как другие потоки в системе вне данного приложения будут влиять на изображение. Я предполагаю, что все темы, независимо от того, в процессе которой они, конкурируют друг с другом для процессоров с точки планировщика зрения. Если общие потоки в системе в первом сценарии, где 1050 и после моего изменения они дошедшие до 1005, это не меняет много для всей системы. У вас еще есть примерно одинаковое количество потоков, конкурирующих за CPU. Так что в данном случае мое заявление не принесет пользы много. Мой вопрос это мое мышление правильно? Другими словами, когда вы говорите о количестве потоков в Epoll () приложение, вы не должны думать о полных потоков в системе не только приложения вы обеспокоены? м обеспокоены тем, как другие потоки в системе вне данного приложения будет влиять на изображение. Я предполагаю, что все темы, независимо от того, в процессе которой они, конкурируют друг с другом для процессоров с точки планировщика зрения. Если общие потоки в системе в первом сценарии, где 1050 и после моего изменения они дошедшие до 1005, это не меняет много для всей системы. У вас еще есть примерно одинаковое количество потоков, конкурирующих за CPU. Так что в данном случае мое заявление не принесет пользы много. Мой вопрос это мое мышление правильно? Другими словами, когда вы говорите о количестве потоков в Epoll () приложение, вы не должны думать о полных потоков в системе не только приложения вы обеспокоены? м обеспокоены тем, как другие потоки в системе вне данного приложения будет влиять на изображение. Я предполагаю, что все темы, независимо от того, в процессе которой они, конкурируют друг с другом для процессоров с точки планировщика зрения. Если общие потоки в системе в первом сценарии, где 1050 и после моего изменения они дошедшие до 1005, это не меняет много для всей системы. У вас еще есть примерно одинаковое количество потоков, конкурирующих за CPU. Так что в данном случае мое заявление не принесет пользы много. Мой вопрос это мое мышление правильно? Другими словами, когда вы говорите о количестве потоков в Epoll () приложение, вы не должны думать о полных потоков в системе не только приложения вы обеспокоены? м предположение, что все потоки, независимо от того, в процессе которой они, конкурирует друг с другом для процессоров с точкой планировщика зрения. Если общие потоки в системе в первом сценарии, где 1050 и после моего изменения они дошедшие до 1005, это не меняет много для всей системы. У вас еще есть примерно одинаковое количество потоков, конкурирующих за CPU. Так что в данном случае мое заявление не принесет пользы много. Мой вопрос это мое мышление правильно? Другими словами, когда вы говорите о количестве потоков в Epoll () приложение, вы не должны думать о полных потоков в системе не только приложения вы обеспокоены? м предположение, что все потоки, независимо от того, в процессе которой они, конкурирует друг с другом для процессоров с точкой планировщика зрения. Если общие потоки в системе в первом сценарии, где 1050 и после моего изменения они дошедшие до 1005, это не меняет много для всей системы. У вас еще есть примерно одинаковое количество потоков, конкурирующих за CPU. Так что в данном случае мое заявление не принесет пользы много. Мой вопрос это мое мышление правильно? Другими словами, когда вы говорите о количестве потоков в Epoll () приложение, вы не должны думать о полных потоков в системе не только приложения вы обеспокоены? Если общие потоки в системе в первом сценарии, где 1050 и после моего изменения они дошедшие до 1005, это не меняет много для всей системы. У вас еще есть примерно одинаковое количество потоков, конкурирующих за CPU. Так что в данном случае мое заявление не принесет пользы много. Мой вопрос это мое мышление правильно? Другими словами, когда вы говорите о количестве потоков в Epoll () приложение, вы не должны думать о полных потоков в системе не только приложения вы обеспокоены? Если общие потоки в системе в первом сценарии, где 1050 и после моего изменения они дошедшие до 1005, это не меняет много для всей системы. У вас еще есть примерно одинаковое количество потоков, конкурирующих за CPU. Так что в данном случае мое заявление не принесет пользы много. Мой вопрос это мое мышление правильно? Другими словами, когда вы говорите о количестве потоков в Epoll () приложение, вы не должны думать о полных потоков в системе не только приложения вы обеспокоены? Мой вопрос это мое мышление правильно? Другими словами, когда вы говорите о количестве потоков в Epoll () приложение, вы не должны думать о полных потоков в системе не только приложения вы обеспокоены? Мой вопрос это мое мышление правильно? Другими словами, когда вы говорите о количестве потоков в Epoll () приложение, вы не должны думать о полных потоков в системе не только приложения вы обеспокоены?
Frederick The Fool
1

голосов
0

ответ
55

Просмотры

Как пассивно выполнять команду в другом потоке

Я пытаюсь выяснить, как пассивно увеличивать значения в других запущенных функциях каждую секунду. (Пытаясь увеличить баллы каждую секунду в кликер игре) общественного Int балл = 0; общественный ИНТ СФС = 0; частный статический Thread й = новый Thread (новый ThreadStart (Tick)); государственный статический сила клещ () {оценка + = СФС; System.Threading.Thread.Sleep (1000); } Обновление: Спасибо за помощь тиканье механизм работает в настоящее время. Последнее, что я борюсь с является установка labelScore.Text = Convert.toString (оценка); так как он статичен. Как я мог получить корыто статических, чтобы иметь возможность установить значение моей labelScore «s?
Levente Bánhidy
1

голосов
0

ответ
37

Просмотры

оптимизации времени для запросов GET к серверу в питоне

Я должен принести большой список URL изображения от в CSV и генерировать получать запросы для этих адресов. В настоящее время я могу иметь выход 50 URLs I 17S. Я хочу, чтобы эти 50 URLs изображения в 5s. Как можно оптимизировать по запросу получить? Я читал, что один из способов будет сделать многопоточность от Я понятия не имею, о его интеграции в мой код? код импорт панда как PD импорт запросы auth_token = 'WY' DF = pd.read_csv ( '/ instaurls.csv') для строки в df.itertuples (): URL = строка [1] соответственно = requests.get ( 'HTTP: / / предсказать / этнической принадлежности? auth_token =% s & URL =% s'% (auth_token, URL)) печати (resp.status_code) печати (resp.json ())
Rehan Aziz
1

голосов
1

ответ
33

Просмотры

Python синхронизация из функции, если требуется много времени

Скажем, у меня есть функция четкости may_take_a_long_time (): в то время как 1: # что-то сделать, если met_condition (): преодолей timeout_dur = 600 may_take_a_long_time () do_something_else () Что я могу сделать так, что если may_take_a_long_time () занимает больше времени, чем timeout_dur, чтобы прервать любую его делать, и продолжить ж / do_something_else (), возможно, установка SIGALARM перед вызовом may_take_a_long_time ()? Как я могу это сделать? или запустить may_take_a_long_time () в потоке, который происходит асинхра, поэтому я могу иметь time.sleep (timeout_dur) в потоке вызывающего абонента?
ealeon
0

голосов
1

ответ
2

Просмотры

System.AccessViolationException или System.ExecutionEngineException аварии в SQLitePCLRaw.provider.e_sqlite3.dll с множественным доступом резьбой

EDIT: (разрешаемые номер 6) Что вызывает System.AccessViolationException или System.ExecutionEngineException сбой в SQLitePCLRaw.provider.e_sqlite3.dll, когда несколько потоков получить доступ к моей FooDbContext одновременно? У меня есть Xamarin Forms приложение (3.5.0.169047) с поддержкой UWP, Android и IOS, используя NETstandard 2.0.3, 2.2.4, Microsoft.EntityFrameworkCore Microsoft.EntityFrameworkCore.Sqlite 2.2.4, и у меня есть ситуации, воспроизводимые аварии (это происходит точно на UWP), что я есть проблема, которая возникает разрешающую при одновременном доступе к базе данных SQLite на устройстве из двух разных потоков одновременно. У меня есть процесс синхронизации (выталкивает локальные данные к API и тянет онлайн данные из API), который может занять до минуты или около того, что мне нужно выполнить в отдельном потоке, чтобы сохранить пользовательский интерфейс отзывчивый во время его работы. Мне также нужно разрешить обработку запросов локальных данных во время синхронизации, чтобы позволить навигацию во время синхронизации или других операций только для чтения данных в пределах приложения во время синхронизации. Затянувшаяся синхронизация работает нормально, если я не делать какие-либо операции доступа к данным во время синхронизации, но вылетает сразу после завершения любой отключающей операции доступа к данным короче. Два исключения аварии, которые я видел произойти (возможно, временные, связанные, для которых приводит к аварии на идентичных репродукций) являются, как видно из вывода отладки из Visual Studio 2017 (v15.9.5): необработанное исключение типа «System .AccessViolationException»произошло в SQLitePCLRaw.provider.e_sqlite3.dll Попытка чтения или записи в защищенную память. Это часто указывает на то, что другая память повреждена. Необработанное исключение типа «System.ExecutionEngineException» произошло в SQLitePCLRaw.provider.e_sqlite3.dll При отладке, не существует каких-либо дополнительных подробностей о исключения; это происходит во время различных долгоиграющих строк коды синхронизации, в зависимости от времени делать прерывающее действие; и продолжительном код, где отладчик показывает исключение происходит это все содержится в Try {...} Поймать (Exception) {...} попробуйте блок в моем коде. Что может быть причиной этого и как я могу решить это? Я прошел через все следующие: Является ли использование SQLite совместим с несколькими потоками? Да; он находится в режиме «сериализованном» по умолчанию в соответствии с https://www.sqlite.org/threadsafe.html и что поддерживает использование многопоточного без ограничений. Основная версия SQLite используется в 3.26.0, который я определил, исследуя мой Microsoft.Data.Sqlite. Информация SQLiteConnection при отладке. Это потому, что я не могу иметь более чем одно соединение открытого с возможностью записи одновременно? Нет; Я даже модифицирована мои строки подключения с помощью Microsoft.Data.Sqlite.SqliteConnectionStringBuilder иметь соответствующий режим (SqliteOpenMode.ReadOnly или SqliteOpenMode.ReadWriteCreate), в зависимости от потребностей каждого доступа к данным. Является ли это потому, что Dispose прерывающего потока FooDbContext (в) избавляется от ресурсов, которые FooDbContext продолжительной нити, на которые ссылаются? Нет; Я исследовал это много, так как это был последний точки останова, я мог ударить до аварии. Даже когда я перегрузил Dispose метода в FooDbContext не делать ничего, даже не называть Dispose базового класса (не рекомендуется, но я попробовал это временно), авария произошла еще. Есть ли настройки можно установить с помощью Microsoft.Data.Sqlite.SqliteConnectionStringBuilder или Microsoft.Data.Sqlite.SQLiteConnection или функцию UseSqlite Microsoft.EntityFrameworkCore.DbContextOptionsBuilder, чтобы гарантировать, что Сериализированная режим используется (я не был 100% уверен, что это было в этом точка)? Нет; Я посмотрел широко, и этот вариант должен быть спрятан в внутренностях SQLite библиотеки выбрала. Я сделал изрядное количество чтения и исследования, которые до сих пор дали мне немного еще я мог бы попробовать. https://www.sqlite.org/sharedcache.html https://www.sqlite.org/lockingv3.html https://www.sqlite.org/atomiccommit.html#sect_9_0 https://www.sqlite.org /uri.html https://docs.microsoft.com/en-us/ef/core/get-started/uwp/getting-started https://docs.microsoft.com/en-us/ef/core/get -started / Netcore / новый-DB-SQLite https: // GitHub. ком / САШ / EntityFrameworkCore / вопросы / 5466 https://docs.microsoft.com/en-us/windows/uwp/data-access/sqlite-databases https://www.connectionstrings.com/sqlite/ https: // csharp.hotexamples.com/examples/-/DbContextOptionsBuilder/UseSqlite/php-dbcontextoptionsbuilder-usesqlite-method-examples.html https://system.data.sqlite.org/index.html/info/dd30ecb89d423c4c https: // WWW. sqlite.org/src/info/e8d439c77685eca6 https://forums.asp.net/t/2143077.aspx?EntityFramework+Core+Do+we+have+to+explicitly+dispose+the+DBContext https: // GitHub. ком / САШИ / EntityFrameworkCore / вопросы / 9901 https://xamarinhelp.com/entity-framework-core-xamarin-forms/ EDIT: Ответ, который решил эту проблему для меня: я заметил, что дллы исключение пришло были SQLitePCLRaw.provider .e_sqlite3.dll. Это привело меня к глядя на то, что на самом деле создает библиотеку SQLite низкого уровня, и это в конечном счете, вызов SQLitePCL.Batteries_V2.Init (); который выбирает для конкретной платформы поставщика SQLite низкого уровня, который будет использоваться. Может ли это быть так? Да; получается, что после прочтения через информацию вики на https://github.com/ericsink/SQLitePCL.raw/wiki/SQLitePCL.Batteries.Init#what-does-batteries_v2init-do, что вызов был SQLitePCL.Batteries_V2.Init предназначено быть сделано только один раз для каждой платформы (либо платформы конкретного кода, или в общем коде, пока установлено Microsoft.EntityFrameworkCore.Sqlite в общем проекте, а также каждую платформу конкретного проекте). Мое использование SQLitePCL.Batteries.Init было неправильно внутри OnConfiguring в FooDbContext, который сделал это называется один раз в настройке из FooDbContext вместо только делается один раз в запуске приложения. Перемещение SQLitePCL.Batteries_V2.Init (); линия из OnConfiguring, и в конструктор App.xaml.cs в моем общем проекте установил ее! не Аварии больше не произошло после того, как доступ к данным прерывающих потока. Я действительно надеюсь, что это спасает кого-то огромные нервотрепки он спас меня, пытаясь добраться до нижней частью этого.
Tommy Elliott
1

голосов
0

ответ
103

Просмотры

Embedding python in C++ for multiprocessing

У меня есть программа на Python, однако, кажется, что я не могу масштабировать его, потому что, если отсутствие многопроцессорных. Мы добавили нарезание резьбы, но так как он все еще работает на одном ядре мы не можем масштабировать достаточно. Я видел здесь, что можно встроить питона в программах на C ++. Так я думал, что делать многопроцессорной в C ++, и в этих процессах вызова функции Python, который мы не можем преобразовать в C ++. Если бы я сделать это таким образом: 1: Является ли мое мышление правильно, что мы можем сделать в полной мере использовать сервер тогда? 2: Будет ли код Python интерпретироваться раз при запуске программы или будет необходимо интерпретировать каждый раз, когда вызывается функция? Другими словами, будет функция все равно будет так быстро, как это сейчас? EDIT: Кажется, я не ясно. В моем понимании в Python есть многопоточность и многопроцессорность. Многопоточность будет использовать то же ядро ​​и может делить пространство памяти [1]. И многопроцессорные могут использовать несколько ядер, но не может разделять память между процессами. У меня есть 3 основные функции, которые все полученные данные WebSocket и поместить это в памяти. Тогда на события одна функция вызывается, которая необходима для доступа к этой памяти. Однако времена эта функция вызывается и частота подачи WebSocket (сообщения / секунда) быстро растут. Одно ядро ​​процессора не может справиться с этим. Я должен сказать, что у меня нет опыта работы с C ++, но я думал, что C ++ может распределять нагрузку между несколькими ядрами / центральным процессором, сохраняя при этом доступа к памяти. Таким образом, мы можем масштабировать, получая больше ядер / процессоров. Однако времена эта функция вызывается и частота подачи WebSocket (сообщения / секунда) быстро растут. Одно ядро ​​процессора не может справиться с этим. Я должен сказать, что у меня нет опыта работы с C ++, но я думал, что C ++ может распределять нагрузку между несколькими ядрами / центральным процессором, сохраняя при этом доступа к памяти. Таким образом, мы можем масштабировать, получая больше ядер / процессоров. Однако времена эта функция вызывается и частота подачи WebSocket (сообщения / секунда) быстро растут. Одно ядро ​​процессора не может справиться с этим. Я должен сказать, что у меня нет опыта работы с C ++, но я думал, что C ++ может распределять нагрузку между несколькими ядрами / центральным процессором, сохраняя при этом доступа к памяти. Таким образом, мы можем масштабировать, получая больше ядер / процессоров.
user3605780
1

голосов
1

ответ
691

Просмотры

мульти нить питон psycopg2

Я использую мульти нить внутри моей программы в питоне. У меня есть 3 очереди. В одном из них я вставки данных в базу данных Postgres. Но прежде, мне нужно проверить, если в базе данных уже существует ряд с определенным доменом. Так что я получил: класс AnotherThread (threading.Thread): Защита __init __ (я, another_queue): threading.Thread .__ __ INIT (сам) self.another_queue = another_queue Защиты работать (самостоятельно): в то время как True: порция = self.another_queue. получаем (), если кусок не '': Dane = кусок [0] .split ( '', 2) cur.execute ( "SELECT, существует (SELECT 1 из глобальной где домен =% s)", (DOMENA,)) шутка = cur.fetchone () печать (шутка) Это часть кода моей третьей очереди. Я'
Daniel Koczuła
1

голосов
1

ответ
305

Просмотры

Как остановить TimerTask уже в исполнении?

Как остановить запущенное TimerTask я прошел через ссылку выше, и моя задача не решить полностью. Мы можем остановить таймер, с помощью вызова timerObj.cancel (). Документация отмены метода четко говорит: Отменяет {@code Timer} и все запланированные задачи. Если есть задача в настоящее время работает на него не влияет. Нет больше задач могут быть запланированы на этой {@code Timer}. Последующие вызовы ничего не делать Так что мой вопрос / проблему здесь есть, если много TimerTasks были запланированы под таймером, как мы могли бы остановить их всех, даже если они выполняются их соответствующие методы прогона? Есть ли способ решить эту проблему? Заранее спасибо.
Uma Sankar
1

голосов
0

ответ
40

Просмотры

Share execution among several tasks in GCD?

У меня есть функция, которая синхронизирует асинхронной сети и базы данных с момента последнего вызова, а затем возвращает результат. Есть несколько вызывающих абонентов из разных потоков, вызывает эту функцию. Вместо выполнения и обслуживания запроса за звонок, я хотел бы в очередь задач, в то время как функция асинхронной работает, а затем промойте очередь таким образом следующий набор задач может быть в очереди. Вот что я придумал до сих пор: расширение DataWorker {// Handle simultanuous запросов подтягивания в очереди частной статической пусть pullQueue = DispatchQueue (метка: "DataWorker.remotePull") частный статический вар pullTasks = [((SomeType) -> Пустота)] () частный статический вар isPulling = ложь FUNC remotePull (завершение: ((SomeType) -> Пустота)?) {{DataWorker.pullQueue.async, если позволить завершение = завершение {DataWorker.
TruMan1
1

голосов
1

ответ
54

Просмотры

тупиковый C ++ переменная состояние резьбы

У меня есть проблема с классом называется Workers. Рабочие :: Рабочие (ИНТ _nbThreads): goWork (ложь), progressWork (ложь), EndWork (ложь), endFinishedWork (ложь), nbThreads (_nbThreads) {для (INT I = 0; istartWork (0); workers-> stopWork (0) проблема заключается в том, что переменная EndWork никогда не установлено верно для (; EndWork;), однако, это один хорошо поставлен верно в методе stopWork: EndWork = верно, если я заменить на (;! EndWork;); по для (;! EndWork;) {Е ( «работа \ п»);}!? программа хорошо работает Что такое моя ошибка, я с нетерпением жду вашего ответа.
Nicolas
1

голосов
1

ответ
237

Просмотры

Как хранить Java отзывной работу в ConcurrentHashMap

Я новичок в многопоточности и вот вопрос: для отзывной интерфейса, как: общедоступный интерфейс отзывной {общественности V вызова (); } Теперь мне нужно реализовать класс с три методом: / * регистрировать некоторые вызываемые задания с помощью ключа сигнала * / недействительным регистр (интермедиат сигнал, Callable центибара); / * Незарегистрированный * / недействительным незарегистрированный (интермедиат сигнала, Callable CB); / * Выполнить все задания с заданным сигналом * / недействительным сигнала (интермедиат сигнал); Я имею в виду функция регистра и незарегистрированный я буду использовать ConcurrentHashMap в Java, некоторые структуры, как: ConcurrentHashMap Тогда вот мои вопросы: как поддержать выше три метода? Как передать вызываемым в качестве переменной? Сигнал недействительным (INT сигнал) будет работать все вызываемым с данным ключом сигнала. для Callable интерфейса, необходимо реализовать функцию V вызова (). Как этот вызов () относится к способу сигнала ()? Если сигнал вызова этого вызова ()?
palindrome
1

голосов
0

ответ
102

Просмотры

Python Уплотненный Для Loops и MultiThreading

Я использовал многопоточность раньше с питоном, однако по какой-то причине, я не могу найти функционирующее решение для создания работоспособного скрипта, который соответствует моим потребностям. В этом сценарии я пишу, у меня есть два списка, я пытаюсь объединить и манипулировать в один список. Я пишу списки в текстовые файлы в заданном количестве линий «1000000 линий». Вопрос, который приходит, когда делает его mulitithreading является то, что переменная я использую для подсчета строк списка «text_amount» не считая их должным образом. И после первого поворота второго по петле возвращается к нулю. Я не уверен, если это ошибка логика, основанная, я использую глобальные переменные неправильно, или мне нужно использовать другой метод поточной. Любая обратная связь от вас, ребят будет очень признателен.
holograms
1

голосов
0

ответ
92

Просмотры

Где ядро ​​свалка в питоне многопоточных приложений Qt взялись?

Настройка Я работаю над приложением, используя Qt и Python с потоками и experiance occational дампы. Я разделась свой код до минимального рабочего примера, и хотел бы знать, что может быть причиной дампов ядра. Мое приложение имеет следующие цели: мне нужно обрабатывать compuational дорогостоящей задачи в separat потоке. Я использую модуль поточного питона для создания потока. Каротаж, что происходит в этом потоке должны быть визуализированы в GUI поток должен отправлять данные в графический интерфейс, который также должен быть визуализированы Моя установка выглядит следующим образом: Logging я создал новый обработчик протоколирования, который присоединен к регистратору и отправляет сообщение в журнал через очередь к основной теме: класс TextEditHandler (logging.Handler): Защита __init __ (самость, очередь): супер (TextEditHandler, сам) .__ INIT __ (logging.INFO) самостоятельно. Очередь = очереди Защиты испускают (я, запись): self.queue.put (self.format (запись)) GUI я использую QDialog для графического интерфейса пользователя, который создается из главного окна моего приложения. QDialog имеет следующие задачи: Он держит QTextEdit, который отображает сообщения журнала и данные Он создает очередь журнала и присоединяет TextEditHandler к регистратору и проходит очередь журнала в TextEditHandler Это создает QTimer, который вызывает в фиксированной Intervall и чеках очередь журнала, а также очередь потока новых сообщений журнала / данные. Это создает поток, а также очереди потока, в котором данные передаются из потока. С точки зрения кода выглядит следующим образом: класс Dialog (QtGui.QDialog): Защиту __init __ (Я): супер (Dialog, самость) .__ INIT __ () self.logWidget = QtGui.QTextEdit () self.logWidget. формат (я)) queue.put (я ** 2) Таймер Таймер обратного вызова методов следует сделать следующее: Необходимо проверить очередь протоколирования новых сообщений журнала и передать их в виджете QTextEdit. Кроме того, очередь нитка должна быть проверена и полученные данные обрабатываются для того, чтобы таймер не блокировать нужно проверить очереди не блокирующие (queue.get (False)). С точки зрения кода выглядит следующим образом: Защиту TimerCallback (Я): попробуйте: войти = self.loggingQueue.get (False) self.logWidget.append (журнал) курсор = self.logWidget.textCursor () cursor.movePosition (QtGui.QTextCursor .END) self.logWidget.setTextCursor (курсор), за исключением Queue.Empty: пропуск попробовать: данные = self.threadQueue.get (False) печать ( "Data: {}". формат (данные)), за исключением Queue.Empty: Отсутствует код возврата для регистрации MWE импорта из PySide импорта QtCore, QtGui Очередь импорта время импорта потоковая импорта, если __name__ == "__main__": logging.basicConfig (уровень = logging.INFO) приложение = QtGui.QApplication ([ "тест"]) диалог = Dialog () dialog.show () app.exec_ () Вопросы Рулонные примерно каждые 10-15 раз дамп ядра встречается, а у меня есть ощущение, что что-то делать с моей реализации многопоточности. Я довольно новый для многопоточных программ и буду признателен за любую подсказку, помощь или предложения вы могли бы иметь. Я также дал класс QThread попробовать, но нашел питон нить легче понять. Разная версия Python: 2.7.14 PySide версия: 1.2.4 код выполняется в нормальной консоли, если она выполняется внутри IDE (PyCharm) проблема не воспроизводимость.
Woltan
1

голосов
3

ответ
115

Просмотры

Синхронизация данных Thread при использовании AsyncCallback

Я новичок в C # асинхронным API. Однако я есть проблема, как для синхронизации данных в функции обратного вызова, и я не могу найти информацию в MSDN. Представьте, что есть разъем обертка использование класса асинхронный способ для передачи и данные RECV: класс MySocket {байт [] буфер = новый байт [4]; Recv недействительными () {_socket.BeginReceive (буфер, 0, 4, 0, новый AsyncCallback (RecvCallback), NULL); } Частная пустота RecvCallback (IAsyncResult аг) {Int N = _socket.EndReceive (аг); если (п == 0) // использование this.buffer}} На RecvCallback может вызывается в другом потоке, который не является поток называют BeginReceive, так что в целом, прежде, чем получить доступ к ней, он должен заблокировать мьютекс или что-то еще, чтобы синхронизировать с BeginReceive ( конечно, нужно зафиксировать тот же объект мьютекса также). Однако в примере MSDN, нет необходимости блокировки. Я заметил, что, данные, которые доступны как в асинхронном пусковой установке и обратный вызов был сообщена IAsyncResult в качестве параметра обратного вызова. Таким образом, вопрос ли .net Lib сделать нить синхронизации на IAsyncResult? Должен ли я изменить выше обратного вызова: частный ничтожной RecvCallback (IAsyncResult ар) {MySocket this_is_this = (MySocket) ar.AsyncState; Int N = this_is_this._socket.EndReceive (аг); если (п == 0) // использовать this_is_this.buffer}? UPDATE: Я отправляю этот вопрос в связи с C # или (.Net) не имеет документа о нем развиваемой модели памяти. И гнездо API док также нет слов об этом. В других языках, как Java, Go, CPP, я могу знать, какие условия делают произойти, прежде чем отношения. Если нет такого рода отношения, пользователя нужно заботиться нить синхронизации сам по себе. Я не знаю, почему C # имеет несколько спецификаций об этом. Я могу только догадываться по примеру MSDN. В примере кода MSDN, нет никакого замка сделан вручную (так синхронизация действий должны быть сделаны где-то сам по себе (.NET Framework)), но это исполнение пользователя использовать AsyncState? Кажется, нет, но я не уверен,
jean
1

голосов
0

ответ
38

Просмотры

Java обработчик событий ждать, прежде чем кусок кода выполняется

Я искал мой вопрос, но я не нашел ничего подобного ... У меня есть обработчик событий для новых данных, полученных от последовательного порта. и когда полный пакет принимается функция (большая функция) выполняет, которая обновляет интерфейс и так далее. проблема иногда до окончания этого кода, новые данные поступают и снова процесс идет от начала и пользовательский интерфейс не будут обновлений в режиме реального времени ... Я хочу, чтобы метод, который держит обработчик событий ждать, пока данная функция не будет выполнена, тогда обработчик события спусковыми и снова ... это код, обработчик событий для приема данных StringBuilder темп = новый StringBuilder (); // Сканер = новый сканер (Selected.getInputStream ()); Selected.addDataListener (новый SerialPortDataListener () {@Override общественные ИНТ getListeningEvents () {вернуться SerialPort.LISTENING_EVENT_DATA_AVAILABLE; } @Override общественное недействительное serialEvent (SerialPortEvent событие) {если (event.getEventType () = SerialPort.LISTENING_EVENT_DATA_AVAILABLE!) Возвращение; байт [] NewData = новый байт [Selected.bytesAvailable ()]; INT numRead = Selected.readBytes (NewData, newData.length); для (INT I = 0; я
a.ghaderi
1

голосов
1

ответ
119

Просмотры

цикл OpenMP, где каждая итерация зависит от предыдущего

Таким образом, у меня есть небольшая петля, что я пытаюсь распараллеливания с помощью OpenMP. Проблема я столкнулся в том, что каждая итерация зависит от результата от предыдущего. Посмотрите на мой код ниже: для (INT = 1; г <N; я ++) {для (Int J = 0, J <М; j ++) {А [I] [J] = A [I-1] [Дж ]; если (х [г]
Ching Ling

Просмотр дополнительных вопросов