MS VC++ въпрос...

15 отговора 378 прегледа
#1

MS VC++ въпрос...

Търся фунция от МS VC++ за изчакване(Wait,Pause), аналогична на SleepЕX(DWORD Milliseconds), koято да не блокира обслужването на съобщенията на таймери и други нишки. В МSDN не открих информация за такава. В конкретния случаи функциата OnControlPort() до завършването си блокира двата ми таймера с обслужващи функции :
void CFView::OnTimer(UINT nIDEvent) (class CFView : public CrecordView) void CMainFrame::OnTimer(UINT nIDEvent) (class CMainFrame : public CFrameWnd)
и нишка активирана от фунция на CFView.

void CFView::OnControlPort() {
while(…)
{ .
do something
SleepEx(10); // Wait
do something
SleepEx(100);
.
}
}
Ако няма готова функция дайте идея как да се напише.

Отговор
в отговор на LWF #2

Re: MS VC++ въпрос...

Njama takawa funkcia - Sleep prawi yield na thread-a, taka che nikakwi syobshtenia njama da minat.
Po princip, UI thread ne trjabwa da prawi absolutno nishto s koeto da blokira syobshteniata, taka che twojat OnControlPort ili trjabwa da si komunikira s drug weche syzdaden worker!!! thread, ili da naprawi nov worker thread.
Ako ti trjabwa UI, tozi worker thread trjabwa da post-ne msg obratno do UI thread-a.

Отговор
в отговор на LWF #3

Re: MS VC++ въпрос...

Има такава функция - WaitForSingleObject
Тя си има таймаут, така че спокойно може да се използва за твоите цели. Но имай предвид, че ако съобщенията на таймера пристигат в тази нишка, те, естествено, няма да се обработват.

Я вышел им наперерез!
Отговор
в отговор на Resurrector #4

Re: MS VC++ въпрос...

Da be da, WFSO + wlozen message loop. Stawa, ama ne e chisto.

Отговор
в отговор на Gonzu #5

Re: MS VC++ въпрос...

Ми на нечист проблем - нечисто решение

Я вышел им наперерез!
Отговор
в отговор на Resurrector #6

Re: MS VC++ въпрос...

Wsyshtnost, maj MsgWaitForMultipleObjects (wmesto WFSO) + wlozen message loop shte swyrshi rabotata, ama pak - naj-dobre e rabota kojato iska wreme da se wyrshi v worker thread.

Отговор
в отговор на Gonzu #7

Re: MS VC++ въпрос...

Az polzvam edin gotov timer (ActiveX) koito raboti v tred.
Za jalost niama metod: sleep() .
Chudia se kak da go prispia bez sleep?

Отговор
в отговор на LWF #8

Re: MS VC++ въпрос...

.... I poneje temata e interesna . Reshih da Vi pitam za edno moe problemche :

Kak mamkamu, da zadam pauza ot nekvi skapani 18ms m/u zapis i chetene v
Com porta ? Ako polzvam sleep stava super ama ako HDD chete stava mazalo:
18ms stavat 30-40 i ustroistvoto koeto cheta se pobyrkwa ?



Mai mi triabva HP9000 ?

Отговор
в отговор на LamerSlamer #9

Re: MS VC++ въпрос...

Ne stawa li s Win32 API funkciite Sleep/SleepEx?

Отговор
в отговор на LamerSlamer #10

Re: MS VC++ въпрос...

Ami Windows ne e real-time OS, taka che wyobshte ne moze da razchitash na towa ot user mode.
A inache s kernel-mode driver moze i da stane.

Отговор
в отговор на LamerSlamer #11

Re: MS VC++ въпрос...

az bih napravil otdelen thread kojto da prieman komandi da chete i pishe - i sam da si sleepva. Drugia wariant e sus callbactzi (no ne sum mnogo siguren wuw Win32 API-to) - imam predvid eventite.

tirulirutatuutuu
Отговор
в отговор на malkia #12

Re: MS VC++ въпрос...

Da, towa e preporychitelniat nachin. Problemyt e che Windows ne ti gararantira nishto za interrupt-ite ili kwanta wreme koito shte ti dade.
Mislja che edinstweno wdigane na prioriteta na programata do Realtime moze da ima njakakyw efekt.

Отговор
в отговор на Gonzu #13

Re: MS VC++ въпрос...

ako application-a ne ti e realtime, togava sigurno njama problem....

kolkoto za kwanta - mozhe da wikash ot wreme na wreme Sleep(0) wuw tozi thread ili w osnovnia da dadesh malko wreme na ostanalite - mnogo mngo sus Win32 multithread programirane ne sum se zanimawal, taka che neznam tochno koe e naj-dobre.

tirulirutatuutuu
Отговор
в отговор на LamerSlamer #14

Re: MS VC++ въпрос...

"Az polzvam edin gotov timer (ActiveX) koito raboti v tred". Коя е тази контрола и
от къде мога да я намеря.

Отговор
в отговор на LWF #15

Re: MS VC++ въпрос...

Виж в ATLBase.h тая функция: AtlWaitWithMessageLoop (може да не я ползваш ами да и вземеш сорс-а или поне някоя идея).

Отговор
в отговор на josarjan #16

Re: MS VC++ въпрос...

Ще проверя тази функция. В тази връзка искам да попитам, знае ли някой от къде може да се намери сорса на MessageBox() ?

Отговор