Программирование на QLua

 
Есть пара вопросов по QLua, если кто-то программирует на нем, просьба откликнуться.
 
Что именно интересует? Какой-то уровень имею
 
md110 #:
Что именно интересует? Какой-то уровень имею

Привет!

Сейчас я вывожу данные через DDE.

Принцип работы такой 

Сначала передается вся таблица, а затем передается только строка, в которой произошли изменения

Но вывод по DDE слишком медленный и я хочу выводить данные по именному каналу (Pipe)

Возможно ли в QLua сделать вывод так же, как по DDE ? 

 
Ответил в личный каб
 
prostotrader #:

Привет!

Сейчас я вывожу данные через DDE.

Принцип работы такой 

Сначала передается вся таблица, а затем передается только строка, в которой произошли изменения

Но вывод по DDE слишком медленный и я хочу выводить данные по именному каналу (Pipe)

Возможно ли в QLua сделать вывод так же, как по DDE ? 

Если ещё актуально, то ниже простой скрипт для Quik для приема и передачи данных по Pipe.
Pipe сервер нужно реализовывать отдельно. Пример сервера на с++ во вложении.


is_run = true
pipe = "\\\\.\\pipe\\test"
pipe_cycle = 100
buffer_size = 256

function main()
	
	message("QLua test: "..pipe, 1)
	
	is_read_write = false
	is_massage = false
	hPipe = nil
	read_buffer = nil
	send_buffer = "test"
	
	while is_run do
		
		if hPipe then
						
			-- send to pipe
			hPipe:seek("set")
			is_read_write = hPipe:write(send_buffer)
			is_read_write = hPipe:flush()
			
			-- read from pipe
			read_buffer = hPipe:read(buffer_size)
			
			if read_buffer then
				message("Read buffer: " .. 	tostring(read_buffer), 1)
				is_read_write = true
			else
				is_read_write = false
			end
			
		end
		
		-- if read write error pipe then reconnect 
		if not hPipe or not is_read_write then
			
			if hPipe then 
				hPipe:close()
				hPipe = nil
			end
			
			if not hPipe then
				hPipe = io.open(pipe, "a+b")
	
				if not hPipe and not is_massage then
					message("Pipe Not Ok: " .. tostring(hPipe), 3)
					is_massage = true
				elseif hPipe then
					message("Pipe Ok: " .. tostring(hPipe), 2)
					is_massage = false
				end
			
			end
		
		end

		sleep(pipe_cycle)	
	end
	
	-- close pipe
	if hPipe then 
		hPipe:close()
	end
	
end

function OnStop()
    is_run = false
end
Файлы:
pipe.zip  2 kb
 
prostotrader #:

Привет!

Сейчас я вывожу данные через DDE.

Принцип работы такой 

Сначала передается вся таблица, а затем передается только строка, в которой произошли изменения

Но вывод по DDE слишком медленный и я хочу выводить данные по именному каналу (Pipe)

Возможно ли в QLua сделать вывод так же, как по DDE ? 

Вы же по большей части на паскале пишите. Вот тут есть пример для делфи. http://www.delphisite.ru/faq/sozdanie-imennykh-kanalov

 
Vladimir Mikhailov #:

Если ещё актуально, то ниже простой скрипт для Quik для приема и передачи данных по Pipe.
Pipe сервер нужно реализовывать отдельно. Пример сервера на с++ во вложении.


Спасибо

Но если 

pipe_cycle = 100

То это значит, что скрипт будет спать 100 мс?

Какой же смысл применять Pipe, если запрос раз в 100мс?  

 
Vitalii Ananev #:

Вы же по большей части на паскале пишите. Вот тут есть пример для делфи. http://www.delphisite.ru/faq/sozdanie-imennykh-kanalov

Спасибо

 
prostotrader #:

Спасибо

Но если 

То это значит, что скрипт будет спать 100 мс?

Какой же смысл применять Pipe, если запрос раз в 100мс?  

Это всего лишь пример возможности реализации передачи данных.
Если нужно передавать данные моментально, то придется использовать колбэк функции и 0 мс в цикле.
А это означает 100% загрузку одного ядра процессора.

p.s.

На мой взгляд лучше использовать передачу данных через общую память.
Реализация проще, lua позволяет это сделать.
 

Причина обращения: