HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #7111  
Старый 29.10.2023, 15:20
Digger Man52
Познавший АНТИЧАТ
Регистрация: 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
(
)
;
 
Ответить с цитированием

  #7112  
Старый 29.10.2023, 17:06
Basedbounty
Участник форума
Регистрация: 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
 
Ответить с цитированием

  #7113  
Старый 29.10.2023, 17:12
Digger Man52
Познавший АНТИЧАТ
Регистрация: 14.07.2019
Сообщений: 1,097
С нами: 3596877

Репутация: 183


По умолчанию

Цитата:
Сообщение от WeWorny  

спасибо за ответ! но у меня не выходит, я буду рад если ты попробуешь это добавить в исходник имгуи, и поделится конечным результатом, сам исходник меню одного из ютуберов - https://github.com/cazzwastaken/borderless-imgui-window
остальной код без изменений

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
(
)
;
}
 
Ответить с цитированием

  #7114  
Старый 29.10.2023, 18:08
Basedbounty
Участник форума
Регистрация: 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














 
Ответить с цитированием

  #7115  
Старый 30.10.2023, 18:36
ARMOR
Флудер
Регистрация: 02.02.2019
Сообщений: 5,070
С нами: 3831395

Репутация: 183


По умолчанию

При инклуде d3d9.h к проекту в котором используется SAMP-API сразу летят ошибки от rpcnsip.h и rpcndr.h:



Знает ли кто какова причина этих ошибок, и есть ли возможность их пофиксить?
 
Ответить с цитированием

  #7116  
Старый 30.10.2023, 18:44
Basedbounty
Участник форума
Регистрация: 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 секунд.
 
Ответить с цитированием

  #7117  
Старый 30.10.2023, 20:05
Digger Man52
Познавший АНТИЧАТ
Регистрация: 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 не забудь
 
Ответить с цитированием

  #7118  
Старый 30.10.2023, 20:28
Basedbounty
Участник форума
Регистрация: 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
 
Ответить с цитированием

  #7119  
Старый 30.10.2023, 20:46
Digger Man52
Познавший АНТИЧАТ
Регистрация: 14.07.2019
Сообщений: 1,097
С нами: 3596877

Репутация: 183


По умолчанию

Цитата:
Сообщение от WeWorny  
C++:





Код:
std
::
thread additionalThread
;
void
StartAdditionalThread
(
)
{
additionalThread
=
std
::
thread
(
[
]
(
)
{
while
(
running
)
{
printf
(
"Start\n"
)
;
std
::
this_thread
::
sleep_for
(
std
::
chrono
::
milliseconds
(
5000
)
)
;
}
}
)
;
}
 
Ответить с цитированием

  #7120  
Старый 30.10.2023, 21:41
Basedbounty
Участник форума
Регистрация: 25.11.2021
Сообщений: 198
С нами: 2351419

Репутация: 48
По умолчанию

как мне сделать функцию StartAdditionalThread в отдельном файле. Чтобы при кнопке start вызывалась эта функция из другого файла
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.