MS VC++ въпрос...
15 отговора
378 прегледа
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);
.
}
}
Ако няма готова функция дайте идея как да се напише.
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);
.
}
}
Ако няма готова функция дайте идея как да се напише.
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.
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.
Re: MS VC++ въпрос...
Има такава функция - WaitForSingleObject
Тя си има таймаут, така че спокойно може да се използва за твоите цели. Но имай предвид, че ако съобщенията на таймера пристигат в тази нишка, те, естествено, няма да се обработват.
Я вышел им наперерез!
Тя си има таймаут, така че спокойно може да се използва за твоите цели. Но имай предвид, че ако съобщенията на таймера пристигат в тази нишка, те, естествено, няма да се обработват.
Я вышел им наперерез!
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.
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?
Za jalost niama metod: sleep() .
Chudia se kak da go prispia bez sleep?
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 ?
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 ?
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.
A inache s kernel-mode driver moze i da stane.
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
tirulirutatuutuu
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.
Mislja che edinstweno wdigane na prioriteta na programata do Realtime moze da ima njakakyw efekt.
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
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
Re: MS VC++ въпрос...
"Az polzvam edin gotov timer (ActiveX) koito raboti v tred". Коя е тази контрола и
от къде мога да я намеря.
от къде мога да я намеря.
Re: MS VC++ въпрос...
Виж в ATLBase.h тая функция: AtlWaitWithMessageLoop (може да не я ползваш ами да и вземеш сорс-а или поне някоя идея).
Re: MS VC++ въпрос...
Ще проверя тази функция. В тази връзка искам да попитам, знае ли някой от къде може да се намери сорса на MessageBox() ?