Зараз обговорюють

"Тобто є ряд завдань, які взагалі без рекурсії не наважуються."  - це як розуміти? Перефразуй, будь ласка. 

виправив, йшлося про те що деякі завдання можна вирішити лише при використанні рекурсії

Спасибі дуже корисна стаття

А ще щось планується подібного найближчим часом?


Дякую за підтримку, радий що Вам сподобалось!

Так маю вже майже дороблений проект по управлінні Audio файлом, на заміну стандартним клавішам управління HTML5, але ще не встиг відтестувати програвання файлів з інтернету, поки лише локально працює

Надіюсь найближчим часом дороблю й закину

Рахунки

webmoneyeur - E385818210641
usd - Z304643423050
uah - U354026817492
rub - R301704373231easypay80002677bitcoin1F5HRGroUtEQW9HBNbeew8iKh5KQ8vJxzw

Зворотній зв'язок

Для покращення роботи сайту надсилайте свої зауваження:
mailЗауваження
mailПропозиція

Статистика

UkrNET - поисково-информационный ресурс

VBA : Багатозадачність виконання за допомогою функції DoEvents та створення циклу із таймером на виконання

Функція DoEvents передає управління з програми операційній системі для обробки подій і повідомлень, що чекають в системній черзі і всіх натискань клавіш з черги SendKeys. Після обробки всіх подій управління повертається додатку (наступний за рядком DoEvents).

Створіть макрос в Excel і запустіть ось цей приклад.

Sub Test ()
	For x = 1 To 1000000000000
		Debug.Print x
	Next x
End Sub 

Будь-яка робота в цей момент може буде проблематична (як мінімум ви не зможете працювати з додатком з якого було запущено макрос). Це пов'язано з проблемами ще від Windows 3.1, тоді при програмуванні від Вас вимагали періодично особливо в процесі тривалих циклів передавати керування операційній системі. VBA досі не позбавлений від цієї проблеми. Вам все одно треба це робити. Робиться це з допомогою DoEvents.

Використовуйте функцію DoEvents для передачі управління операційній системі кожен раз проходу циклу. Давайте змінимо наш приклад.

Sub Test ()
	For x = 1 To 1000000000000
		DoEvents
		Debug.Print x
	Next x
End Sub 

При виконанні даного коду усі процеси на комп'ютері будуть відбуватись паралельно із виконанням макросу, а також можна буде продовжувати працювати із додатком який вже опрацьовує макрос.

Функція DoEvents повертає значення цілочисельного типу даних (Integer), яке дорівнює кількості відкритих форм. В інших додатках функція DoEvents повертає 0.

Якщо Ваша програма гальмує виконання інших програм згадайте про цей крок.


Цикл затримки та із таймером на виконання

При виконанні циклу затримки функція DoEvents дозволяє операційній системі ЦП виконувати всі відкладених завдань з затримкою 10 сек після чого повертається до виконання подальшого коду.

x = Timer()
Do While x + 10 > Timer()
	DoEvents
Loop 

або зациклити виконання коду з певною періодичністю, наприклад кожні 3 сек. повторювати код

Do
    pauseTime = 3
    If Timer >= Finish + pauseTime Then
        [тіло процедури]
        Debug.Print Timer
        Finish = Timer
    End If
    DoEvents
Loop 

Примітка: Дана конструкція була використання при написанні гри Tetris

Виклики операційної системи

Коли Visual Basic викликає операційну система, операційна система може повертати управління навіть перед обробкою команди повністю. Наприклад функція Shell запускає додаток Microsoft Word. Якщо Microsoft Word не відкрито, всі зусилля для встановлення зв'язку з нею викличуть зупинку код. За допомогою DoEvents, процедура гарантує, що операція оболонки, повністю виконується перед обробкою наступної інструкції макросу.

z% = Shell("WinWord myDoc.Docx", 1)
DoEvents
...
...

де myDoc.Docx це файл у папці "Мої документи"

Взаємоблокування

Розглянемо ситуацію, в якій макрос Visual Basic викликає додаток, який в свою чергу очікує другий додаток, щоб отримати деякі дані. Якщо макрос не надає елемент керування для другого додатка, результатом є взаємоблокування. У сеансі між декількома додатками за допомогою DoEvents видаляє ймовірність такого взаємоблокування.

Проблеми, пов'язані з DoEvents

- використання занадто великого числа вкладених інструкцій DoEvents може вичерпати простір стека і таким чином створити повідомлення про помилку "Перевищення розмірів стека". Ця помилка посилання на додаток стек простору, виділеного для додатка Microsoft Excel.

- переконайтеся, що процедура, яка дала управління з DoEvents не виконувалася повторно з іншої частини коду до завершення обробки першого звернення DoEvents. Це може привести до непередбачуваних результатів.

- після передачі управління операційній системі, не дозволяє визначити, коли Microsoft Excel продовжить управління. Після отримання контролю над процесором, операційна система буде обробляти всі очікують події, які зараз в черзі повідомлень (наприклад, миші і клавіатури). Це може виявитися непридатним для деяких додатків придбання даних реального часу.

- не слід використовувати функцію DoEvents, якщо існує ймовірність непередбачуваної взаємодії інших додатків з цією процедурою в той час, коли управління передано операційній системі.


view371like0dislike0 avatard_l4w clock 2016-09-21 01:54

Коментарі:



Для даної статті відсутні коментарі

Про нас

"Programmers World" розроблено з метою полегшення в освоєнні навичок програмування, та поширення матеріалів з сфери ІТ Українською мовою.

Кожен бажаючий може безкоштовно користуватися ресурсами сайту, щоб:

- Вивчати теоретичні аспекти мов програмування

- Переглядати практичне застосування теорії при виконанні різних міні проектів з відкритим кодом

- Розміщати свої завдання на форумі для допомоги в їх реалізації, або готового коду який може бути корисний іншим користувачам

- Спілкуватись з іншими користувачами та обмінюватись досвідом

Сайт функціонує на безопланій основі та ентузіазмі розробника, якщо Ви бажаєте долучитись до розвитку даного проекту то можете пожертвувати кошти на рахунки розміщені в блоці "Допомога сайту".

Сайт

Зареєстровані користувачі можуть скористатися системою діалогів, в профілі користувача, для отримання потрібної інформації. Написати!

Також Ви можете використати форми відправки Зауважень та Пропозицій.


Електронна пошта

Ви можете звертатись на нашу поштову скриньку site.programmersworld@gmail.com

www.000webhost.com