|
|
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
2wadman Помнится, мы с тобой уже пересекались по этой теме. Глянь со стороны на модуль (D2010 >). Если что-то в комментах упустил - поясню. Нужен внешний _конструктивный_ взгляд (ты по этой теме ближе, так что тебе адресую). Ну, и все присоединяйтесь, разумеется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2015, 02:25 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Для затравки: DoCreate излишен, достаточно виртуального конструктора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2015, 02:58 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Беглым взглядом не совсем уловил сути: сендер создается в другом потоке, который создается иными средствами (руками, а не сендером)? То есть это продвинутый обработчик очереди с объектами? Ну и примеры-бы. Куда-ж без них? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2015, 09:24 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, в общем случае, по месту использования - создаем экземпляр, объекты приходят по Post. Все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2015, 11:08 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanсендер создается в другом потоке, который создается иными средствами (руками, а не сендером)? То есть это продвинутый обработчик очереди с объектами? Это в буквальном смысле использование механизма PostMessage для прозрачной пересылки. Со всеми плюсами (прозрачность) и минусами (очередь на самом деле конечна). Если создать объект Sender-а в нитке и регулярно вызывать его ProcessMessages - события будут приходить и выполняться в контексте нитки (для главной нитки достаточно создания объекта, количество не важно - события приходят адресно). Однако, главное и изначальное применение - создание экземпляра в любой дельфийской форме и дальнейшее использование "асинхронности" в различных операциях с передачей произвольных объектов. В той нитке, в которой создан объект (и в которой вызывается ProcessMessages - для главной нитки не нужно), в той и будут обрабатываться приходящие события. wadmanНу и примеры-бы. Куда-ж без них? Пока, к сожалению, без них. Сделаю, нужны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2015, 11:31 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
dred2kСо всеми плюсами (прозрачность) и минусами (очередь на самом деле конечна). Меня удивляет акцент на длину очереди. На моем примере: дохлый целерон, на нем потоков около 120-ти (по одному на чтение и на запись), работа с железками. Нет никаких затыков и даже речи о десятках сообщений в очереди. Хотя, это скорее вопрос архитектуры. Если криво написать, то можно нарваться на любые логические и физические лимиты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2015, 11:57 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, акцент он не от "красного" словца. Вот представь ситуацию: 1. Нитка получает некие данные и постит их в окно для визуализации. Важно, чтобы "все дошло". 2. Вполне себе штатно вызывается некий внешний вызов (к примеру, экспорт TcxGrid-а, который, к сожалению, ничего "не знает кроме себя") - все, события благополучно не обрабатываются и копятся в очереди, в общем случае - бесконтрольно. И таких ситуаций - хватает. Я считаю, что в общем случае следует использовать надежную схему "очередь событий с хранением" + событие "есть данные в очереди". Ну, а в частных и аккуратно - можно и очередь событий Windows, "как она есть". Как-то так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2015, 12:14 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanХотя, это скорее вопрос архитектуры. Если криво написать, то можно нарваться на любые логические и физические лимиты. Согласен. В "конце концов" все упрется в правильность подхода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2015, 12:16 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Из изменений помню только, что лог теперь не дергает закрытие/открытие файла, если в очереди есть сообщения, что ускоряет вывод лога при большом потоке данных. wthread.pas Код: pascal 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. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. 347. 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 360. 361. 362. 363. 364. 365. 366. 367. 368. 369. 370. 371. 372. 373. 374. 375. 376. 377. 378. 379. 380. 381. 382. 383. 384. 385. 386. 387. 388. 389. 390. 391. 392. 393. 394. 395. 396. 397. 398. 399. 400. 401. 402. 403. 404. 405. 406. 407. 408. 409. 410. 411. 412. 413. 414. 415. 416. 417. 418. 419. 420. 421. 422. 423. 424. 425. 426. 427. 428. 429. 430. 431. 432. 433. 434. 435. 436. 437. 438. 439. 440. 441. 442. 443. 444. 445. 446. 447. 448. 449. 450. 451. 452. 453. 454. 455. 456. 457. 458. 459. 460. 461. 462. 463. 464. 465. 466. 467. 468. 469. 470. 471. 472. 473. 474. 475. 476. 477. 478. 479. 480. 481. 482. 483. 484. 485. 486. 487. 488. 489. 490. 491. 492. 493. 494. 495. 496. 497. 498. 499. 500. 501. 502. 503. 504. 505. 506. 507. 508. 509. 510. 511. 512. 513. 514. 515. 516. 517. 518. 519. 520. 521. 522. 523. 524. 525. 526. 527. 528. 529. 530. 531. 532. 533. 534. 535. 536. 537. 538. 539. 540. 541. 542. 543. 544. 545. 546. 547. 548. 549. 550. 551. 552. 553. 554. 555. 556. 557. 558. 559. 560. 561. 562. 563. 564. 565. 566. 567. 568. 569. 570. 571. 572. 573. 574. 575. 576. 577. 578. 579. 580. 581. 582. 583. 584. 585. 586. 587. 588. 589. 590. 591. 592. 593. 594. 595. 596. 597. 598. 599. 600. 601. 602. 603. 604. 605. 606. 607. 608. 609. 610. 611. 612. 613. 614. 615. 616. 617. 618. 619. 620. 621. 622. 623. 624. 625. 626. 627. 628. 629. 630. 631. 632. 633. 634. 635. 636. 637. 638. 639. 640. 641. 642. 643. 644. 645. 646. 647. 648. 649. 650. 651. 652. 653. 654. 655. 656. 657. 658. 659. 660. 661. 662. 663. 664. 665. 666. 667. 668. 669. 670. 671. 672. 673. 674. 675. 676. 677. 678. 679. 680. 681. 682. 683. 684. 685. 686. 687. 688. 689. 690. 691. 692. 693. 694. 695. 696. 697. 698. 699. 700. 701. 702. 703. 704. 705. 706. 707. 708. 709. 710. 711. 712. 713. 714. 715. 716. 717. 718. 719. 720. 721. 722. 723. 724. 725. 726. 727. 728. 729. 730. 731. 732. 733. 734. 735. 736. 737. 738. 739. 740. 741. 742. 743. 744. 745. 746. 747. 748. 749. 750. 751. 752. 753. 754. 755. 756. 757. 758. 759. 760. 761. 762. 763. 764. 765. 766. 767. 768. 769. 770. 771. 772. 773. 774. 775. 776. 777. 778. 779. 780. 781. 782. 783. 784. 785. 786. 787. 788. 789. 790. 791. 792. 793. 794. 795. 796. 797. 798. 799. 800. 801. 802. 803. 804. 805. 806. 807. 808. 809. 810. 811. 812. 813. 814. 815. 816. 817. 818. 819. 820. 821. 822. 823. 824. 825. 826. 827. 828. 829. 830. 831. 832. 833. 834. 835. 836. 837. 838. 839. 840. 841. 842. 843. 844. 845. 846. 847. 848. 849. 850. 851. 852. 853. 854. 855. 856. 857. 858. 859. 860. 861. 862. 863. 864. 865. 866. 867. 868. 869. 870. 871. 872. 873. 874. 875. 876. 877. 878. 879. 880. 881. 882. 883. 884. 885. 886. 887. 888. 889. 890. 891. 892. 893. 894. 895. 896. 897. 898. 899. 900. 901. 902. 903. 904. 905. 906. 907. 908. 909. 910. 911. 912. 913. 914. 915. 916. 917. 918. 919. 920. 921. 922. 923. 924. 925. 926. 927. 928. 929. 930. 931. 932. 933. 934. 935. 936. 937. 938. 939. 940. 941. 942. 943. 944. 945. 946. 947. wlog.pas Код: pascal 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. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2016, 09:22 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, Использую твой модуль в своем проекте. Работает пока без нареканий. Небольшое предложение: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Чтобы не менять количество параметров в конструкторе, если включать wlog. И еще не объясни назначение DoneThread. Код из него можно же написать в деструкторе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2016, 08:48 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
brick08Чтобы не менять количество параметров в конструкторе, если включать wlog. wlog без проблем включается. Или ты WTHREAD_DEBUG_LOG используешь? brick08И еще не объясни назначение DoneThread. Код из него можно же написать в деструкторе. Код: pascal 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2016, 08:55 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
[quot wadman]brick08 Или ты WTHREAD_DEBUG_LOG используешь? В том то и дело, что при тестах, то включал, то выключал директиву. Соответственно компилятор начинает ругаться на несовпадение кол-ва параметров в конструкторе. Так вот, чтобы избежать этого, просто поставить AUseDebugLog: Boolean = True в конструкторе. А разве деструктор не выполняется в контексте? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2016, 09:20 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
brick08В том то и дело, что при тестах, то включал, то выключал директиву. Вынеси в wthread.inc и добавь строку в оба модуля {$i wthread.inc} Код: pascal 1. 2. 3. в wlog.pas поправь Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. В следующий раз выложу уже с этими изменениями. brick08А разве деструктор не выполняется в контексте? Нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2016, 09:33 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Восстановил совместимость с *никсами (убрал PeekMessage). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2016, 11:24 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
Добавил поддержку AffinityMask. Теперь можно раскидывать потоки по разным ядрам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2016, 10:25 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2016, 17:43 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)а не пробовали I/O Completion Ports для этого приспособить? Попробовал-бы, если-бы знал "зачем?" :) А почитав https://habrahabr.ru/post/59282/ и вовсе растерялся... Чем оно хорошо и в каких случаях? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 10:22 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadman, ну фактически, как я понимаю, конкретно для реализации логера, можно писать сразу в файл асинхронным способом и в потоке обработки только подчищать ресурсы выделенных буферов т.е. алгоритм такой: выделяется блок памяти (условно строка) вызывается операция записи в файл, в которую передаётся выделенный блок поток контроля порта отслеживает какие операции завершились и удаляет отработавшие буферы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 11:18 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)конкретно для реализации логера, можно писать сразу в файл асинхронным способом Асинхронно - это без порядка, что, на мой взгляд, вредно для логирования, где порядок имеет первостепенное значение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 11:21 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmankealon(Ruslan)конкретно для реализации логера, можно писать сразу в файл асинхронным способом Асинхронно - это без порядка, что, на мой взгляд, вредно для логирования, где порядок имеет первостепенное значение. ну асинхронно здесь имеется ввиду "не ждать результата", порядок то будет соблюдаться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 11:31 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)wadmanпропущено... Асинхронно - это без порядка, что, на мой взгляд, вредно для логирования, где порядок имеет первостепенное значение. ну асинхронно здесь имеется ввиду "не ждать результата", порядок то будет соблюдаться Хорошо, а плюс в чем, если сравнивать с моей реализацией? Что у меня не хватает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 11:33 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanХорошо, а плюс в чем, если сравнивать с моей реализацией? Что у меня не хватает? тут дело в том, что с излишком хватает 1. самое главное - очередь не придётся самостоятельно организовывать 2. возможно работать будет быстрее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 11:38 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)1. самое главное - очередь не придётся самостоятельно организовывать И у меня очередь не своя. :) kealon(Ruslan)2. возможно работать будет быстрее Скорее всего нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 11:40 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
wadmanСкорее всего нет. я бы не был так категоричен без тестов, потому и спросил пробовали или нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 11:43 |
|
||
|
Шаблон класса для работы с потоком (WThread, Thread)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)wadmanСкорее всего нет. я бы не был так категоричен без тестов, потому и спросил пробовали или нет Я-бы попробовал, если-бы мне сказали, что это лучше/быстрее/надежнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2016, 11:45 |
|
||
|
|

start [/forum/topic.php?fid=58&startmsg=39021361&tid=2039179]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
139ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 426ms |

| 0 / 0 |
