powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Синхронизация разных потоков
25 сообщений из 28, страница 1 из 2
Синхронизация разных потоков
    #39677996
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как это можно реализовать? Если создать в GUI приложение поток, и вызвать ShowMessage то GUI виснет.

Использую не совсем стандартные потоки pthreads. Так как есть надобность взаимодействовать с Си библиотекой поточной. А в ней используется pthreads

https://learnc.info/c/pthreads_create_and_join.html

Виснет к примеру при вызове
Код: pascal
1.
    Result := _TaskDialogIndirect(pTaskConfig, pnButton, pnRadioButton, pfVerificationFlagChecked)



В функции TaskDialogIndirect юнит Winapi.CommCtrl

Использую бесплатную новую Delphi
...
Рейтинг: 0 / 0
Синхронизация разных потоков
    #39677997
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если не использовать VCL GUI. А вызывать из консольного приложения. То ShowMessage адекватно работает Как и нужно

Есть ещё нужна взаимодействовать с самим GUI в другом потоке.
...
Рейтинг: 0 / 0
Синхронизация разных потоков
    #39678080
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гирлионайльдо,

Ну так пошли основному потоку сообщение, а уже в главном потоке покаже диалог по этому сообщению. Тут уже не один раз это обговарилось.
...
Рейтинг: 0 / 0
Синхронизация разных потоков
    #39678106
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тут заметил, что любое действие в pthreads потоке. Отражается на GUI Delphi. Как будто потока и нет вовсе для него. Хотя он адекватно параллельно отрабатывает разный функционал...
...
Рейтинг: 0 / 0
Синхронизация разных потоков
    #39678110
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там используется pthreads для Win32 а не для Люникс
...
Рейтинг: 0 / 0
Синхронизация разных потоков
    #39678174
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гирлионайльдо,

может там такой поток, что одно название контексты надо смотреть.
...
Рейтинг: 0 / 0
Синхронизация разных потоков
    #39678234
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaon,

Там mutex, я глянул что инициализация происходит так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
pthreads_monitor_t* pthreads_monitor_alloc() {
	pthread_mutexattr_t at;
	pthreads_monitor_t *m = 
		(pthreads_monitor_t*) calloc(1, sizeof(pthreads_monitor_t));

	pthread_mutexattr_init(&at);
#if defined(PTHREAD_MUTEX_RECURSIVE) || defined(__FreeBSD__)
	pthread_mutexattr_settype(&at, PTHREAD_MUTEX_RECURSIVE);
#else
	pthread_mutexattr_settype(&at, PTHREAD_MUTEX_RECURSIVE_NP);
#endif
	if (pthread_mutex_init(&m->mutex, &at) != 0) {
		free(m);
		return NULL;
	}

	if (pthread_cond_init(&m->cond, NULL) != 0) {
		pthread_mutex_destroy(&m->mutex);
		free(m);
		return NULL;
	}

	return m;
}



Запуск
Код: plaintext
1.
pthread_create(&thread->thread, NULL, (void* (*) (void*)) pthreads_routine, (void*)&routine)



Завершение этого добра
Код: plaintext
1.
2.
3.
	pthread_mutex_destroy(&m->mutex);
	pthread_cond_destroy(&m->cond);
	free(m);
...
Рейтинг: 0 / 0
Синхронизация разных потоков
    #39678285
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гирлионайльдо,

ну это имеет отношение к потокам чуть менее чем полностью.
...
Рейтинг: 0 / 0
Синхронизация разных потоков
    #39678358
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот сделал видео, где показано, что без GUI потоки работают.

А с GUI потоки не работают на само GUI. Оно начинает ждать выполнения потока

https://my.mail.ru/mail/filezilla23/video/_myvideo/1.html

https://my.mail.ru/mail/filezilla23/video/_myvideo/1.html][img] https://filed3-25.my.mail.ru/pic?url=http://my.mail.ru/ /video/url/sc01/9078108146890702849&sigt=e6d1845f0971ff83e234b0af725ebdd4&ts=1532438610 [/img]
...
Рейтинг: 0 / 0
Синхронизация разных потоков
    #39678375
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гирлионайльдо,

Я вот в твоей доке чего вычитал. Ты случайно так не делаешь?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Вызов

status = pthread_join(thread, (void**)&status_addr);
if (status != SUCCESS) {
    printf("main error: can't join thread, status = %d\n", status);
    exit(ERROR_JOIN_THREAD);
}

Приводит к тому, что основной поток будет ждать завершения порождённого. Функция

int pthread_join(pthread_t thread, void **value_ptr);

Откладывает выполнение вызывающего (эту функцию) потока, до тех пор, пока не будет выполнен поток thread. Когда pthread_join выполнилась успешно, то она возвращает 0. Если поток явно вернул значение (это то самое значение SUCCESS, из нашей функции), то оно будет помещено в переменную value_ptr.
...
Рейтинг: 0 / 0
Синхронизация разных потоков
    #39678405
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster,

Нет, не делаю.

Код с видео в области GUI который заставляет виснуть его
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
	public function on_FormCanva_Click($self) {	
		$thread = new class extends Thread {
			public function run() {
				$R = file_get_contents('http://zlib.net/');
				$R .= file_get_contents('http://zlib.net/');
				$R .= file_get_contents('http://zlib.net/');
				$R .= file_get_contents('http://zlib.net/');
				$R .= file_get_contents('http://zlib.net/');
				$R .= file_get_contents('http://zlib.net/');
				file_put_contents('1.txt', $R);
			}
		};

		$thread->start();
		
		/*
		$Canvas = $this->Canvas;
		$Canvas->Pen->Cobor = 1343676;
		$Canvas->Brush->Color = 745456;
		$Canvas->Rectangle(10,10,50,50);*/
	}




А вот с видео. Где 2.txt появляется быстрее чем 1.txt не ожидая выполнения первого потока

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
	$thread = new class extends Thread {
		public function run() {
			$R = file_get_contents('http://zlib.net/');
			$R .= file_get_contents('http://zlib.net/');
			$R .= file_get_contents('http://zlib.net/');
			$R .= file_get_contents('http://zlib.net/');
			$R .= file_get_contents('http://zlib.net/');
			$R .= file_get_contents('http://zlib.net/');
			file_put_contents('1.txt', $R);
		}
	};

	$thread->start();
	
	$thread2 = new class extends Thread {
		public function run() {
			file_put_contents('2.txt', file_get_contents('http://zlib.net/'));
		}
	};

	$thread2->start() && $thread2->join();

...
Рейтинг: 0 / 0
Синхронизация разных потоков
    #39678458
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[rutube=https://rutube.ru/video/597e98987849502cd43f06174f92a950/]
...
Рейтинг: 0 / 0
Синхронизация разных потоков
    #39678460
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[rutube=https://rutube.ru/video/597e98987849502cd43f06174f92a950]

[rutube=http://rutube.ru/play/embed/11271995]

[rutube=rutube.ru/video/597e98987849502cd43f06174f92a950]

[rutube=rutube.ru/play/embed/11271995]
...
Рейтинг: 0 / 0
Синхронизация разных потоков
    #39678463
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Синхронизация разных потоков
    #39678478
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гирлионайльдо,

открой для себя ScreenToGif
...
Рейтинг: 0 / 0
Синхронизация разных потоков
    #39678530
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но странно же. То что новый поток, и GUI виснет
...
Рейтинг: 0 / 0
Синхронизация разных потоков
    #39678537
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ГирлионайльдоНо странно же.

Ничего странного. В кривых руках кривая библиотека способна на самые кривые вещи.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Синхронизация разных потоков
    #39678552
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovНичего странного. В кривых руках кривая библиотека способна на самые кривые вещи.


Только она популярная
...
Рейтинг: 0 / 0
Синхронизация разных потоков
    #39678559
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
ГирлионайльдоDimitry SibiryakovНичего странного. В кривых руках кривая библиотека способна на самые кривые вещи.


Только она популярная


речь была не про популярность, а про кривые руки, которые её используют
...
Рейтинг: 0 / 0
Синхронизация разных потоков
    #39678568
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator,

А читать?

Dimitry Sibiryakov кривая библиотека способна на самые кривые вещи.

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

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
		$thread = new class extends Thread {
			public function run() {
				$R = file_get_contents('http://zlib.net/');
				$R .= file_get_contents('http://zlib.net/');
				$R .= file_get_contents('http://zlib.net/');
				$R .= file_get_contents('http://zlib.net/');
				$R .= file_get_contents('http://zlib.net/');
				$R .= file_get_contents('http://zlib.net/');
				file_put_contents('1.txt', $R);
			}
		};

		$thread->start();




Оригинальный пример
Код: php
1.
2.
3.
4.
5.
6.
7.
$thread = new class extends Thread {
	public function run() {
		echo "Hello World\n";
	}
};

$thread->start() && $thread->join();
...
Рейтинг: 0 / 0
Синхронизация разных потоков
    #39678569
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Гирлионайльдоdefecator,

А читать?

Dimitry Sibiryakov кривая библиотека способна на самые кривые вещи.

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

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
		$thread = new class extends Thread {
			public function run() {
				$R = file_get_contents('http://zlib.net/');
				$R .= file_get_contents('http://zlib.net/');
				$R .= file_get_contents('http://zlib.net/');
				$R .= file_get_contents('http://zlib.net/');
				$R .= file_get_contents('http://zlib.net/');
				$R .= file_get_contents('http://zlib.net/');
				file_put_contents('1.txt', $R);
			}
		};

		$thread->start();





Оригинальный пример
Код: php
1.
2.
3.
4.
5.
6.
7.
$thread = new class extends Thread {
	public function run() {
		echo "Hello World\n";
	}
};

$thread->start() && $thread->join();



тут форум по Delphi, ты перепутал говноСи и Delphi
...
Рейтинг: 0 / 0
Синхронизация разных потоков
    #39678571
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator,

А всё же. Может причина в том - какой поток порождает Delphi ? Раз pthreads его и за поток не считает.


Именно,
Код: pascal
1.
  Application.Run;
...
Рейтинг: 0 / 0
Синхронизация разных потоков
    #39678573
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гирлионайльдопокажи где тут у меня кривое использование библиотеки

Это не Дельфи код. И твои видео никто смотреть не будет. Если в самом деле хочешь
разобраться - начни с встроенного TThread, который проверен годами.

PS: Кривое использование начинается на пару строк ниже приведённого.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Синхронизация разных потоков
    #39678574
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТАк что именно-то не работает?
я так и не понял.

Попробуй простыми словами объяснить.
...
Рейтинг: 0 / 0
Синхронизация разных потоков
    #39678583
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cobalt747,

После запуска GUI
Код: pascal
1.
 Application.Run;



Созданный поток через pthreads win32
https://sourceware.org/pthreads-win32/

Заставляет ждать основный поток GUI - что приводит к тому, что интерфейс замирает.
- Из за другого потока
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Синхронизация разных потоков
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]