Как создать диалоговое окно MFC с индикатором выполнения в отдельном потоке?

соглашения, что Вы используете для Вас приложение, зависели бы от телефона

1), Какое приложение это. 2), Какую операционную систему Вы используете.

Это определенно верно. Я не уверен в быстрых DOS соглашениях, но в подобных Unix системах общие соглашения примерно:

1) Форматирование

appName параметры

2), Односимвольные параметры (такие как 'x') передаются как-x 3), параметры символа Multi (такие как 'добавлять-ключи) передаются как - добавлять-ключи

9
задан foraidt 5 November 2009 в 11:06
поделиться

4 ответа

По-прежнему было бы безопаснее переместить логику соединения с БД в отдельный поток. С DB в потоке диалога вы сможете перерисовать индикатор выполнения, но не другие элементы управления в диалоговом окне.

2
ответ дан 4 December 2019 в 15:22
поделиться

Пробовали ли вы использовать SendMessage с PBM_SETMARQUEE вместо SetMarquee . Я никогда не пробовал себя, но это должно сработать.

На мой взгляд, самый простой способ добиться того, что вы хотите сделать, - это установить соединение ProgressBar и DB в потоке пользовательского интерфейса и использовать OnTimer для вызова StepIt ] в индикаторе выполнения. Вы также можете создать индикатор выполнения в потоке пользовательского интерфейса и использовать настраиваемое сообщение для рабочего потока, чтобы изменить состояние выполнения.

В любом случае, я согласен с AlexEzh в том, что лучший способ сделать это - заставить работать все, кроме пользовательского интерфейса. в рабочем потоке.

1
ответ дан 4 December 2019 в 15:22
поделиться

Надеюсь, эта статья о создании заставки для собственного потока с индикатором выполнения может быть полезной. Я написал его, решая проблему с блокировкой потоков на уровне очереди сообщений MFC.

7
ответ дан 4 December 2019 в 15:22
поделиться
  1. Создайте рабочий поток, используя AfxBeginThread .
  2. В этом потоке создайте CProgressCtrl и вызовите Create , передайте диалоговое окно как родительский для CProgressCtrl, используйте стиль выделения для управления прогрессом.
  3. В потоке создать цикл ожидания сообщения:

    MSG msg;
    while (GetMessage (& Msg, NULL, 0, 0))
    {
    TranslateMessage (& msg);
    DispatchMessage (& msg);
    }

  4. Циклу сообщений необходимо проверить глобальный флаг, чтобы узнать, следует ли выйти из цикла.

2
ответ дан 4 December 2019 в 15:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: