[#1] Kogiel mogiel z sygnalamia exec-a
Czesc,
im dalej w to ide tym wiecej pytan (i to do czegos co na poczatku wydawalo sie oczywiste bo przyjalem ze tak ma byc i koniec)

Mam 3 zrodla sygnalow: okno, drag&drop, mhi, ktore sa zrobione w sposob ponizej (uproszczenie wielkie nadchodzi oraz skladnia z blitza, do tego niezbyt szcesliwie dobrane nazwy zmiennych bo robilem to metoda ciaglego dopisywania wyczytanych "nowosci" a nie "pomyslunku"):

1. dla okna, po jego otwarciu mam
winmask = 1 LSL *win\UserPort\mp_SigBit

2. dla przeciagania do okna czyli appwindow mam:
*msgport = CreateMsgPort_()
*appwin = AddAppWindowA_(...)
appwinmask =1 LSL *msgport\mp_SigBit

3. dla MHI mam (wziete z instruki):
mysignal = AllocSignal(-1)
mymask = 1 LSL mysignal

a teraz czesc glowna
Repeat
sm = Wait_( winmask | appwinmask | mymask )
select sm
  case sm&winmask      : Gosub signal_win:
  case sm&appwinmask : Gosub signal_appwin:
  case sm&mymask       : Gosub signal_mhi:
end select
Until quitflag




No i teraz nadchodzi koszzmar. W tej chwili mam to zrobione tak:
.signal_win
Repeat
*msg = GT_GetIMsg_(*win\UserPort)
    .... GT_RelpyIMsg_(*msg) ...
Until *msg=0
Return




.signal_appwin
*appmsg=GetMsg_(*msgport)
While *appmsg
    .... RelpyMsg_(*appmsg) ...
*appmsg=GetMsg_(*msgport)
Wend
Return




.signal_mhi
...TUTAJ NIE MAM ZADBEGO GetMsg() ani ReplyMsg() - i nie bylo tez w programie przykladowym , no ale tam nie bylo okna tylko cli
Return



Czy dla MHI tez powinienem pobierac wiadomosc i odpowiadac?
[#2] Re: Kogiel mogiel z sygnalamia exec-a

@peceha, post #1

Repeat
sm = Wait_( winmask | appwinmask | mymask )
select sm
  case sm&winmask      : Gosub signal_win:
  case sm&appwinmask : Gosub signal_appwin:
  case sm&mymask       : Gosub signal_mhi:
end select
Until quitflag


Nie wiem jak BlitzBasic-owe select/case dziala. Jezeli odpowiada switch/case z C to ten kawalek jest nie jest za bardzo dobry. Jezeli dziala inaczej to nie wiem :)

Przy obsludze wiadomosci w signal_win zalozyles na slepo ze jakas wiadomosc przyszla. Lepiej zrob tak samo jak zrobiles w procedurze signal_appwin.

Czy dla MHI tez powinienem pobierac wiadomosc i odpowiadac?


Jezeli wysylasz tylko sygnaly to obslugujesz tylko sygnaly. Jezeli z MHI dostajesz wiadomosci to powinienes je odbierac i odpowiadac. Nie ma znaczenia czy to cli czy program okienkowy.
[#3] Re: Kogiel mogiel z sygnalamia exec-a

@mschulz, post #2

Dzieki, wiele wyjasniles.

Najbardziej mnie interesowało to co napisales na koncu :)

Jezeli wysylasz tylko sygnaly to obslugujesz tylko sygnaly. Jezeli z MHI dostajesz wiadomosci to powinienes je odbierac i odpowiadac. Nie ma znaczenia czy to cli czy program okienkowy.

W manualu napisali ze MHI wysyla sygnal za kazdym razem gdy oprozni bufor danych - czyli zakladam ze ten sygnal to wlasnie jest to co odbera Wait() i t wszystko.

Signal_win zrobilem wlasnie tak bo gdy dam WHILE WEND (dokladnie jak dla MHI) to zwisa komputer - znaczy ten zwis nastepuje gdy uzywam GT_GetIMsg() w petli WHILE- WEND (zwykle GetMsg() dziala poprawnie)

Dzieki

Ostatnia aktualizacja: 01.10.2019 09:22:59 przez peceha
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem