 |
|

29.10.2023, 15:20
|
|
Познавший АНТИЧАТ
Регистрация: 14.07.2019
Сообщений: 1,097
С нами:
3596877
Репутация:
183
|
|
Сообщение от WeWorny
Как в imgui на с++ сделать кнопку start, и кнопку stop, если нажать на кнопку start - бесконечно будет в консоль выводится какой либо текст, но если нажать кнопку stop - вывод текста в консоль прекратится, нажму опять на start - опять начнется вывод текста, нажму опять на stop - вывод текста в консоль прекратится. Заранее спасибо!
C++:
Код:
bool
running
=
false
;
void
RenderUI
(
)
{
if
(
!
running
&&
ImGui
::
Button
(
"Start"
)
)
{
running
=
true
;
printf
(
"Вывод текста.\n"
)
;
}
if
(
running
&&
ImGui
::
Button
(
"Stop"
)
)
{
running
=
false
;
printf
(
"Конец вывода текста.\n"
)
;
}
}
и в твое окно, после ImGui::NewFrame();
C++:
Код:
ImGui
::
NewFrame
(
)
;
RenderUI
(
)
;
ImGui
::
Render
(
)
;
|
|
|

29.10.2023, 17:06
|
|
Участник форума
Регистрация: 25.11.2021
Сообщений: 198
С нами:
2351419
Репутация:
48
|
|
Сообщение от Digger Man
C++:
Код:
bool
running
=
false
;
void
RenderUI
(
)
{
if
(
!
running
&&
ImGui
::
Button
(
"Start"
)
)
{
running
=
true
;
printf
(
"Вывод текста.\n"
)
;
}
if
(
running
&&
ImGui
::
Button
(
"Stop"
)
)
{
running
=
false
;
printf
(
"Конец вывода текста.\n"
)
;
}
}
и в твое окно, после ImGui::NewFrame();
C++:
Код:
ImGui
::
NewFrame
(
)
;
RenderUI
(
)
;
ImGui
::
Render
(
)
;
спасибо за ответ! но у меня не выходит, я буду рад если ты попробуешь это добавить в исходник имгуи, и поделится конечным результатом, сам исходник меню одного из ютуберов - https://github.com/cazzwastaken/borderless-imgui-window
|
|
|

29.10.2023, 17:12
|
|
Познавший АНТИЧАТ
Регистрация: 14.07.2019
Сообщений: 1,097
С нами:
3596877
Репутация:
183
|
|
остальной код без изменений
C++:
Код:
bool
running
=
false
;
void
gui
::
Render
(
)
noexcept
{
ImGui
::
SetNextWindowPos
(
{
0
,
0
}
)
;
ImGui
::
SetNextWindowSize
(
{
WIDTH
,
HEIGHT
}
)
;
ImGui
::
Begin
(
" "
,
&
isRunning
,
ImGuiWindowFlagsNoResize
|
ImGuiWindowFlagsNoSavedSettings
|
ImGuiWindowFlagsNoCollapse
|
ImGuiWindowFlagsNoMove
)
;
if
(
!
running
&&
ImGui
::
Button
(
"Start"
)
)
{
running
=
true
;
printf
(
"Вывод текста.\n"
)
;
}
if
(
running
&&
ImGui
::
Button
(
"Stop"
)
)
{
running
=
false
;
printf
(
"Конец вывода текста.\n"
)
;
}
if
(
running
)
// будет выводится вечно, пока running не станет false, так как меню отрисовывается каждый кадр, отсюда и проверка будет происходить каждый кадр
{
printf
(
"Текст в цикле.\n"
)
;
}
ImGui
::
End
(
)
;
ImGui
::
NewFrame
(
)
;
ImGui
::
Render
(
)
;
}
|
|
|

29.10.2023, 18:08
|
|
Участник форума
Регистрация: 25.11.2021
Сообщений: 198
С нами:
2351419
Репутация:
48
|
|
Сообщение от Digger Man
остальной код без изменений
C++:
Код:
bool
running
=
false
;
void
gui
::
Render
(
)
noexcept
{
ImGui
::
SetNextWindowPos
(
{
0
,
0
}
)
;
ImGui
::
SetNextWindowSize
(
{
WIDTH
,
HEIGHT
}
)
;
ImGui
::
Begin
(
" "
,
&
isRunning
,
ImGuiWindowFlagsNoResize
|
ImGuiWindowFlagsNoSavedSettings
|
ImGuiWindowFlagsNoCollapse
|
ImGuiWindowFlagsNoMove
)
;
if
(
!
running
&&
ImGui
::
Button
(
"Start"
)
)
{
running
=
true
;
printf
(
"Вывод текста.\n"
)
;
}
if
(
running
&&
ImGui
::
Button
(
"Stop"
)
)
{
running
=
false
;
printf
(
"Конец вывода текста.\n"
)
;
}
if
(
running
)
// будет выводится вечно, пока running не станет false, так как меню отрисовывается каждый кадр, отсюда и проверка будет происходить каждый кадр
{
printf
(
"Текст в цикле.\n"
)
;
}
ImGui
::
End
(
)
;
ImGui
::
NewFrame
(
)
;
ImGui
::
Render
(
)
;
}
после запуска кода - меню без всего, это просто черный прямоугольник, но если я уберу строчки " ImGui::NewFrame();
ImGui::Render();" - меню уже будет с функциями, но если я нажму кнопку start - код воспроизведется как нужно, но я не могу нажать на кнопку stop. Вот скриншот того что происходит после кнопки start

|
|
|

30.10.2023, 18:36
|
|
Флудер
Регистрация: 02.02.2019
Сообщений: 5,070
С нами:
3831395
Репутация:
183
|
|
При инклуде d3d9.h к проекту в котором используется SAMP-API сразу летят ошибки от rpcnsip.h и rpcndr.h:
Знает ли кто какова причина этих ошибок, и есть ли возможность их пофиксить?
|
|
|

30.10.2023, 18:44
|
|
Участник форума
Регистрация: 25.11.2021
Сообщений: 198
С нами:
2351419
Репутация:
48
|
|
Всем привет! я хочу спросить о моей проблеме в imgui на c++. Суть проблемы такова - У меня имеется две кнопки - start, stop. Start отвечает за начало цикла, а stop заканчивает его. Код в цикле который выполняется при кнопке Stop вызывает у меня проблему, если мне надо в коде того цикла заморозить функцию через Sleep - замораживается все imgui, и соответственно я не могу нажать на кнопку stop. Если что-либо не понятно - могу рассказать более подробно. Кусок кода ниже.
с++:
Код:
bool
running
=
false
;
void
gui
::
Render
(
)
noexcept
{
ImGui
::
SetNextWindowPos
(
{
0
,
0
}
)
;
ImGui
::
SetNextWindowSize
(
{
WIDTH
,
HEIGHT
}
)
;
ImGui
::
Begin
(
"test"
,
&
isRunning
,
ImGuiWindowFlags_NoResize
|
ImGuiWindowFlags_NoSavedSettings
|
ImGuiWindowFlags_NoCollapse
|
ImGuiWindowFlags_NoMove
)
;
if
(
!
running
&&
ImGui
::
Button
(
"Start"
)
)
{
running
=
true
;
printf
(
"Начало вывода текста.\n"
)
;
}
if
(
running
&&
ImGui
::
Button
(
"Stop"
)
)
{
running
=
false
;
printf
(
"Конец вывода текста.\n"
)
;
}
if
(
running
)
// будет выводится вечно, пока running не станет false, так как меню отрисовывается каждый кадр, отсюда и проверка будет происходить каждый кадр
{
printf
(
"Тут и происходит тот самый цикл после кнопки start"
)
;
Sleep
(
5000
)
;
}
ImGui
::
End
(
)
;
ImGui
::
Render
(
)
;
}
Пока 5 секунд в цикле не пройдут, я не могу нажать на stop, но и тут проблема, у меня есть доля секунды пока опять начнется цикл, и мне надо ожидать 5 секунд.
|
|
|

30.10.2023, 20:05
|
|
Познавший АНТИЧАТ
Регистрация: 14.07.2019
Сообщений: 1,097
С нами:
3596877
Репутация:
183
|
|
Сообщение от WeWorny
Всем привет! я хочу спросить о моей проблеме в imgui на c++. Суть проблемы такова - У меня имеется две кнопки - start, stop. Start отвечает за начало цикла, а stop заканчивает его. Код в цикле который выполняется при кнопке Stop вызывает у меня проблему, если мне надо в коде того цикла заморозить функцию через Sleep - замораживается все imgui, и соответственно я не могу нажать на кнопку stop. Если что-либо не понятно - могу рассказать более подробно. Кусок кода ниже.
с++:
Код:
bool
running
=
false
;
void
gui
::
Render
(
)
noexcept
{
ImGui
::
SetNextWindowPos
(
{
0
,
0
}
)
;
ImGui
::
SetNextWindowSize
(
{
WIDTH
,
HEIGHT
}
)
;
ImGui
::
Begin
(
"test"
,
&
isRunning
,
ImGuiWindowFlags_NoResize
|
ImGuiWindowFlags_NoSavedSettings
|
ImGuiWindowFlags_NoCollapse
|
ImGuiWindowFlags_NoMove
)
;
if
(
!
running
&&
ImGui
::
Button
(
"Start"
)
)
{
running
=
true
;
printf
(
"Начало вывода текста.\n"
)
;
}
if
(
running
&&
ImGui
::
Button
(
"Stop"
)
)
{
running
=
false
;
printf
(
"Конец вывода текста.\n"
)
;
}
if
(
running
)
// будет выводится вечно, пока running не станет false, так как меню отрисовывается каждый кадр, отсюда и проверка будет происходить каждый кадр
{
printf
(
"Тут и происходит тот самый цикл после кнопки start"
)
;
Sleep
(
5000
)
;
}
ImGui
::
End
(
)
;
ImGui
::
Render
(
)
;
}
Пока 5 секунд в цикле не пройдут, я не могу нажать на stop, но и тут проблема, у меня есть доля секунды пока опять начнется цикл, и мне надо ожидать 5 секунд.
C++:
Код:
bool
running
=
false
;
std
::
thread additionalThread
;
void
StartAdditionalThread
(
)
{
additionalThread
=
std
::
thread
(
(
)
{
while
(
running
)
{
printf
(
"Start\n"
)
;
std
::
thisthread
::
sleepfor
(
std
::
chrono
::
milliseconds
(
5000
)
)
;
}
}
)
;
}
void
StopAdditionalThread
(
)
{
if
(
additionalThread
.
joinable
(
)
)
{
running
=
false
;
additionalThread
.
join
(
)
;
}
}
void
gui
::
Render
(
)
noexcept
{
ImGui
::
SetNextWindowPos
(
{
0
,
0
}
)
;
ImGui
::
SetNextWindowSize
(
{
WIDTH
,
HEIGHT
}
)
;
ImGui
::
Begin
(
"test"
,
&
isRunning
,
ImGuiWindowFlagsNoResize
|
ImGuiWindowFlagsNoSavedSettings
|
ImGuiWindowFlagsNoCollapse
|
ImGuiWindowFlagsNoMove
)
;
if
(
!
running
&&
ImGui
::
Button
(
"Start"
)
)
{
running
=
true
;
printf
(
"Начало вывода текста.\n"
)
;
StartAdditionalThread
(
)
;
}
if
(
running
&&
ImGui
::
Button
(
"Stop"
)
)
{
running
=
false
;
printf
(
"Конец вывода текста.\n"
)
;
StopAdditionalThread
(
)
;
}
ImGui
::
End
(
)
;
ImGui
::
Render
(
)
;
}
#include не забудь
|
|
|

30.10.2023, 20:28
|
|
Участник форума
Регистрация: 25.11.2021
Сообщений: 198
С нами:
2351419
Репутация:
48
|
|
Сообщение от Digger Man
C++:
Код:
bool
running
=
false
;
std
::
thread additionalThread
;
void
StartAdditionalThread
(
)
{
additionalThread
=
std
::
thread
(
(
)
{
while
(
running
)
{
printf
(
"Start\n"
)
;
std
::
thisthread
::
sleepfor
(
std
::
chrono
::
milliseconds
(
5000
)
)
;
}
}
)
;
}
void
StopAdditionalThread
(
)
{
if
(
additionalThread
.
joinable
(
)
)
{
running
=
false
;
additionalThread
.
join
(
)
;
}
}
void
gui
::
Render
(
)
noexcept
{
ImGui
::
SetNextWindowPos
(
{
0
,
0
}
)
;
ImGui
::
SetNextWindowSize
(
{
WIDTH
,
HEIGHT
}
)
;
ImGui
::
Begin
(
"test"
,
&
isRunning
,
ImGuiWindowFlagsNoResize
|
ImGuiWindowFlagsNoSavedSettings
|
ImGuiWindowFlagsNoCollapse
|
ImGuiWindowFlagsNoMove
)
;
if
(
!
running
&&
ImGui
::
Button
(
"Start"
)
)
{
running
=
true
;
printf
(
"Начало вывода текста.\n"
)
;
StartAdditionalThread
(
)
;
}
if
(
running
&&
ImGui
::
Button
(
"Stop"
)
)
{
running
=
false
;
printf
(
"Конец вывода текста.\n"
)
;
StopAdditionalThread
(
)
;
}
ImGui
::
End
(
)
;
ImGui
::
Render
(
)
;
}
#include не забудь
В этом имгуи я писал https://drive.google.com/file/d/14YBCAqpSlPzmXeAnPSWe4E6Hlhu4fsIl/view
|
|
|

30.10.2023, 20:46
|
|
Познавший АНТИЧАТ
Регистрация: 14.07.2019
Сообщений: 1,097
С нами:
3596877
Репутация:
183
|
|
C++:
Код:
std
::
thread additionalThread
;
void
StartAdditionalThread
(
)
{
additionalThread
=
std
::
thread
(
[
]
(
)
{
while
(
running
)
{
printf
(
"Start\n"
)
;
std
::
this_thread
::
sleep_for
(
std
::
chrono
::
milliseconds
(
5000
)
)
;
}
}
)
;
}
|
|
|

30.10.2023, 21:41
|
|
Участник форума
Регистрация: 25.11.2021
Сообщений: 198
С нами:
2351419
Репутация:
48
|
|
как мне сделать функцию StartAdditionalThread в отдельном файле. Чтобы при кнопке start вызывалась эта функция из другого файла
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|