TARAKAN
Tifon
Бакалавр
Карма: +0/-0
Offline
Пол:
Сообщений: 134
|
|
« Ответ #20 : Июнь 07, 2009, 11:17:19 » |
|
Мне надо сделать интервал между перемещениями фигуры/текста, а не между переключением на другой поток ... Всетаки попробовал, сделал вот так while(!p->stop) { Sleep(3000); EnterCriticalSection(&cs); Старый слип удалил естественно. Теперь чтото вообще не видно ничего ... хотя когда идет остановка на 3 секунды думаю должен быть виден результат но его нету =\
|
|
|
Записан
|
Студент: По моему легче использовать printf... EvilMax: Зато cout - это тру! = ))
|
|
|
tos
|
|
« Ответ #21 : Июнь 08, 2009, 12:44:54 » |
|
DWORD WINAPI ThreadFunc_2(PVOID pvParam) { DWORD dwRes=0; static RECT rPopup; static HDC hDCPopup; struct potok *p=(struct potok *)(pvParam); static UINT xPosE,yPosE; static int flag=0; static char str[]="Строка"; GetClientRect(p->hWndPot,&rPopup); xPosE=((rPopup.right-rPopup.left)-50)/2.; yPosE=((rPopup.bottom-rPopup.top)-30)/2.; while(!p->stop) { hDCPopup=GetDC(p->hWndPot); EnterCriticalSection(&cs); while(count1<1) { InvalidateRect(p->hWndPot,NULL,true); UpdateWindow(p->hWndPot); TextOut(hDCPopup,xPosE,yPosE,str,7); if(yPosE+40>=rPopup.bottom-rPopup.top) flag=1; if(yPosE<=40) flag=0; if(flag) yPosE-=10; else yPosE+=10; count1++; } count1=0; ReleaseDC(p->hWndPot,hDCPopup); LeaveCriticalSection(&cs); Sleep(500); } return dwRes; }
DWORD WINAPI ThreadFunc_3(PVOID pvParam) { DWORD dwRes=0; static RECT rPopup; static HDC hDCPopup; struct potok *p=(struct potok *)(pvParam); static UINT xPosE,yPosE; static int flag=1; GetClientRect(p->hWndPot,&rPopup); xPosE=0; yPosE=0; while(!p->stop) { hDCPopup=GetDC(p->hWndPot); EnterCriticalSection(&cs); while(count2<1) { InvalidateRect(p->hWndPot,NULL,true); UpdateWindow(p->hWndPot); RoundRect(hDCPopup,xPosE,yPosE,xPosE+70,yPosE+50,30,30);
if(xPosE+100>=rPopup.right || yPosE+5<=rPopup.top) flag=0;
if(xPosE<=rPopup.left+10 || yPosE+55>=rPopup.bottom) flag=1;
if(flag) { xPosE+=40; yPosE+=30; } else { xPosE-=40; yPosE-=30; } count2++; } count2=0; ReleaseDC(p->hWndPot,hDCPopup); LeaveCriticalSection(&cs); Sleep(500); } return dwRes; } отличия от своего ищи сам. код рабочий
|
|
|
Записан
|
|
|
|
TARAKAN
Tifon
Бакалавр
Карма: +0/-0
Offline
Пол:
Сообщений: 134
|
|
« Ответ #22 : Июнь 08, 2009, 12:25:13 » |
|
Отличия я заметил, спасибо все работает, в принципе ошибку понял, НО видимо вы невнимательно читали мои сообщения. Мне надо сделать интервал между перемещениями фигуры/текста, а не между переключением на другой поток ... Т е Слип должен быть в цикле while(count2<10){ ... } Если разместить его так как вы предлогаете, то у меня будет остановка между переключением на другой поток... А если размещать Слип в цикле while(count2<10){ ... } то получаем старую проблему, выполняется постоянно поток, который запущен первым. Мне надо чтобы текст сдвинулся 8 раз с интервалом допустим 0,5 сек, потом переключился на другой поток и прямоугольник сдвинулся 10 раз с интервалом 0,4 сек.
|
|
|
Записан
|
Студент: По моему легче использовать printf... EvilMax: Зато cout - это тру! = ))
|
|
|
tos
|
|
« Ответ #23 : Июнь 08, 2009, 12:31:28 » |
|
а слабо сделать очень маленький Sleep после LeaveCriticalSection чтоб другой поток успел войти?
|
|
|
Записан
|
|
|
|
TARAKAN
Tifon
Бакалавр
Карма: +0/-0
Offline
Пол:
Сообщений: 134
|
|
« Ответ #24 : Июнь 08, 2009, 12:38:10 » |
|
Т к интервал должен быть между перемещением фигуры/текста, то и слип должен быть в цикле while(count2<1){...} , а следовательно внутри входа/выхода из крит. секции ... А если его расположить не в этом цикле, т е после LeaveCriticalSection то будет выполняться моментально смещение 8 раз текста (на глаз его просто не заметишь), потом задержка, а потом будет так же быстро выполнено перемещение фигуры 10 раз ... А мне как раз надо чтобы было видно как он делает эти 8 шагов, задержка между переключением мне вообще не нужна ...
|
|
|
Записан
|
Студент: По моему легче использовать printf... EvilMax: Зато cout - это тру! = ))
|
|
|
tos
|
|
« Ответ #25 : Июнь 08, 2009, 01:09:17 » |
|
ещё немного, и мне выдадут предупреждение за мат. сделай В ТОМ ЧИСЛЕ задержку ПОСЛЕ освобождения секции. ну что непонятно??? неужели трудно самому сообразить?
|
|
|
Записан
|
|
|
|
TARAKAN
Tifon
Бакалавр
Карма: +0/-0
Offline
Пол:
Сообщений: 134
|
|
« Ответ #26 : Июнь 08, 2009, 01:15:16 » |
|
Блин теперь понял Слова "в том числе" помогли )))))) Получается что без слипа поток просто не успевал подхватить критическую секцию и поэтому постоянно 1 выполнялся =\
|
|
|
Записан
|
Студент: По моему легче использовать printf... EvilMax: Зато cout - это тру! = ))
|
|
|
tos
|
|
« Ответ #27 : Июнь 08, 2009, 01:17:30 » |
|
Halleluja!!!!!!!!!1
|
|
|
Записан
|
|
|
|
ZaQ
Бакалавр
Карма: +6/-1
Offline
Пол:
Сообщений: 128
|
|
« Ответ #28 : Июнь 08, 2009, 07:03:15 » |
|
да, и делай слип(1), с нулем в параметрах потоки могут драться, особенно на (псевдо)многоядерных процах.
|
|
|
Записан
|
|
|
|
AlexXxandr
Гость
|
|
« Ответ #29 : Сентябрь 22, 2009, 08:41:45 » |
|
Добрый вечер всем! Такое вот задание есть: "с использованием стандартного диалога Open определяется путь и имя исходного файла, для просмотра его содержимого необходимо вызвать редактор Notepad с передачей ему пути и имени файла" Добавил пункт меню и в его обработку пишу: case ID_VIEW: // Инициализация OPENFILENAME ZeroMemory(&ofn,sizeof(ofn)); ofn.lStructSize=sizeof(ofn); ofn.hwndOwner=hWnd; ofn.lpstrFile=FileName; ofn.lpstrFile[0]='\0'; ofn.nMaxFile=sizeof(FileName); ofn.lpstrFilter="*.txt\0*.TXT\0"; ofn.nFilterIndex=1; ofn.lpstrFileTitle=NULL; ofn.nMaxFileTitle=0; ofn.lpstrInitialDir="d:"; ofn.Flags=OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST; [i]if (GetOpenFileName(&ofn)==TRUE) //ЗДЕСЬ НАВЕРНО ОБРАБОТКА БЛОКНОТОМ[/i] break;
Собственно вопросы: 1. Как запустить блокнотом нужный мне файл? 2. Как сделать стартовой папкой т.е. что передать в ofn.lpstrInitialDir чтобы открывалась текущая папка, т.е. в которой находится ехе файл. ЗЫ может есть что почитать про работу с файлами с примерами?
|
|
|
Записан
|
|
|
|
tos
|
|
« Ответ #30 : Сентябрь 22, 2009, 09:22:55 » |
|
без обид, но MSDN тебе в помощь. нет смысла отвечать на такие глупые вопросы. это ведь не "помогите найти ошибку". цитированием гугла заниматься не собираюсь. ЗЫ. я не вредный - всегда помогу в более сложной ситуации. обращайся.
|
|
|
Записан
|
|
|
|
AlexXxandr
Гость
|
|
« Ответ #31 : Сентябрь 22, 2009, 10:05:34 » |
|
Хорошо и что же мне в мсдн искать? Я незнаю как это спросить у гугла даже, то что спрашивал, фигня получается...
|
|
|
Записан
|
|
|
|
tos
|
|
« Ответ #32 : Сентябрь 22, 2009, 10:13:59 » |
|
набираем OPENFILENAME и получаем шикаааарную (С) (Эрик Картман) сцылку. http://msdn.microsoft.com/en-us/library/ms646839(VS.85).aspxи вуаля - LPCTSTR lpstrInitialDir - то что нам надо! читаем дальше Windows 2000/XP/Vista: - If lpstrFile contains a path, that path is the initial directory. - Otherwise, lpstrInitialDir specifies the initial directory. - Otherwise, if the application has used an Open or Save As dialog box in the past, the path most recently used is selected as the initial directory. However, if an application is not run for a long time, its saved selected path is discarded. If lpstrInitialDir is NULL and the current directory contains any files of the specified filter types, the initial directory is the current directory. - Otherwise, the initial directory is the personal files directory of the current user. - Otherwise, the initial directory is the Desktop folder. окей, вроде ясно. тперь по 1 пункту. вбиваем в поиск "параметры запуска notepad" и получаем ссылку http://forum.script-coding.info/viewtopic.php?id=2858а теперь читаем "notepad.exe c:\file.txt" ну, круто я пользуюсь гуглом? ЗЫ. с тебя пиво за урок пользования гуглом.
|
|
|
Записан
|
|
|
|
broken-wings
wings of empathy
ЧеГеварный
Проректор
Карма: +176/-6
Offline
Пол: Награды:
Сообщений: 4531
Эксперт по какашкам и поиску смыслов
|
|
« Ответ #33 : Сентябрь 22, 2009, 10:25:42 » |
|
tos, ты сегодня - само добро )))
|
|
|
Записан
|
кругом одно и то же свинство но я умею выделять по незначительным нюансам спорт журналистику кино
|
|
|
Fr0sT
Очень добрый
Первак
Карма: +3/-0
Offline
Пол:
Сообщений: 45
ИУС 07
|
|
« Ответ #34 : Октябрь 08, 2009, 09:45:30 » |
|
Вопрос по работе с файлами: открыл файл, с помощью WriteFile записал строку. В строке были символы \n\r, а в файле все данные записаны в одну строку. Как быть если нужна новая строка? ( Отправлено в: Сентябрь 24, 2009, 09:53:17 ) Неактуально. Идея в том, что нужно \r\n а не наоборот ( Отправлено в: Сентябрь 25, 2009, 11:08:30 ) Задание: создать текстовый файл для записи, для него создать проекцию в память, по адресу этой проекции сформировать содержимое выходного файла. HANDLE hFile,hFileMappingCreate;
hFile=CreateFile(szFileName,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE, NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0); hFileMappingCreate=CreateFileMapping(hFile,0,PAGE_READWRITE,0,0,0); char* BufferWrite=(char*)MapViewOfFile(hFileMappingCreate,FILE_MAP_ALL_ACCESS,0,0,0); strcpy(BufferWrite,"1111"); //
Вылетает на последней строке с First-chance exception in Lab2.exe: 0xC0000005: Access Violation. Где ошибся? З.Ы. пользовался нижним примером с http://forum.vingrad.ru/articles/topic-157806.html
|
|
|
Записан
|
Видимо, какая-то постоянная величина оказалась немного переменной... (с) Йон Колфер
|
|
|
tos
|
|
« Ответ #35 : Октябрь 09, 2009, 02:03:48 » |
|
проект VS в студию.
|
|
|
Записан
|
|
|
|
Fr0sT
Очень добрый
Первак
Карма: +3/-0
Offline
Пол:
Сообщений: 45
ИУС 07
|
|
« Ответ #36 : Октябрь 10, 2009, 08:53:06 » |
|
вот
|
|
|
Записан
|
Видимо, какая-то постоянная величина оказалась немного переменной... (с) Йон Колфер
|
|
|
O(o.o)O
Абитуриент
Карма: +0/-0
Offline
Сообщений: 1
|
|
« Ответ #37 : Октябрь 12, 2009, 08:48:31 » |
|
Всем доброго времени суток.
Подскажите пожалуйста аналоги цункций MoveWindow и SetWindowPos.
Для чего мне это нужно: хотел написать маленькую прогу которая заставит кнопку пуск летать по экрану, вышеперечисленные функции не смогли этого выполнить (на ноуте стоит виндовс 7) , хотя под виндовс ХР все корректно отрабатывает...
Если кто-нибудь еще и объяснит почему возникла такая сложность с кнопкой Пуск буду очень благодарен.
З.ы. просьба за глупые вопросы сильно не бить, я только начал учить WinAPI...
|
|
|
Записан
|
|
|
|
Sanya
Абитуриент
Карма: +0/-0
Offline
Сообщений: 7
|
|
« Ответ #38 : Июнь 18, 2010, 04:45:54 » |
|
Люди добрые помогите пожайлуста с прогой. Может у кого есть .Переместить все файлы из одного каталога в другой с подкаталогами (реализовать в WinAPI)
|
|
|
Записан
|
|
|
|
Kenny
|
|
« Ответ #39 : Июнь 18, 2010, 04:48:52 » |
|
попробуй wget и mv для win. Еще можно попробовать сдать powershell.
|
|
|
Записан
|
|
|
|
|