C language

Elaaz

Member
Apr 23, 2012
821
37
0
මචන්ලා C language එකේ threading ගැන ප්‍රශ්නයක් තියෙනවා. උදවු කරන්න පුළුවන් කෙනෙක් ඉන්නවද?

ප්‍රශ්නේ මේකයි මචන්. P Threads වලින් තමා වෙන්න ඕනි. මේ ගැටලුව මට අවේ embedded development එකකදී. මම directfb library එකෙන් GUI එකක් design කළා. මට දැන් ඕනි මචන් මේ system එකේ තියෙන nfc device එක read කරන්න. මම මේක while loop එකකින් කළා. infinity loop එකක්. nfc card එකක් detect උනාම loop එක break වෙනවා. card value එක return වෙනවා. හැබැයි මචන් මේක thread එකක් නොදා කලොත් card එක detect වෙනතුරු system එක struck වෙනවා. එහෙම වෙන්න බැහැ. ඒ අතරතුර keypad එකෙන් input ගන්න පුළුවන් වෙන්න ඕනි. වෙන thread එකක return වෙන value එකක් කොහොමද තවත් thread එකකට ගන්නේ? thread join කරලා කරන්න try කළා. එත් thread දෙකේ වෙන්නේ separate process දෙකක් නේ. කොහොමද මේක කරන්නේ?
 
Last edited:

NEMISIS

Well-known member
  • Nov 13, 2013
    11,348
    19,442
    113
    Colombo
    ප්‍රශ්නෙ දාපන් එතකොට කට්ටිය ඇවිත් උත්තර දෙයි

    මෙතන ප්‍රශ්නෙ දාල තිබුනා නම් මටත් ගොඩක් වෙලාවට උත්තරයක් දෙන්න තිබුනා, ප්‍රශ්නෙ මෙතනම දාන්න

    මම දන්නෙ POSIX Threads (P Threads) තමයි
     

    Elaaz

    Member
    Apr 23, 2012
    821
    37
    0
    ප්‍රශ්නෙ දාපන් එතකොට කට්ටිය ඇවිත් උත්තර දෙයි

    මෙතන ප්‍රශ්නෙ දාල තිබුනා නම් මටත් ගොඩක් වෙලාවට උත්තරයක් දෙන්න තිබුනා, ප්‍රශ්නෙ මෙතනම දාන්න

    මම දන්නෙ POSIX Threads (P Threads) තමයි

    මචන් ප්‍රශ්නේ දැම්ම. පොඩ්ඩක් බලපන්කො මචන්.
     

    Kasun k

    Well-known member
  • Mar 11, 2009
    10,357
    492
    83
    United States
    C නම් කරලා නැහැ මචන්. ඒ උනාට ඕක while loop එකකින් කරන එක පොඩ්ඩක් අවුල් වගේ නැද්ද? උබට බැරිද card එකක් read කරපුවම event එකක් raise කරන්න? C වලින් event raise කරන හැටි නම් දන්නේ න කොල්ලෝ. while true දැම්ම කියන්නේ උබේ memory එකත් ගොඩක් utilize වෙනවා. :sorry:
     

    NEMISIS

    Well-known member
  • Nov 13, 2013
    11,348
    19,442
    113
    Colombo
    රිටන් වෙන්නෙ නැති වැඩක් (ඉන්ෆයිනයිට් ලූප් එකක් වගේ) හරි ගොඩක් වෙලා යන වැඩක් මේන් ත්‍රෙඩ් එකේ කරොත් ඇප්ලිකේශන් එක ස්ටක් වෙනවා ඒක අනිවාර්ය දෙයක්
    ඒක නිසා ලොකු වෙලාවක් යන වැඩ වෙනම ත්‍රෙඩ් එකක දාන එක තමයි හොදම වැඩේ


    Pthread join වලින් ඔය දීල තියන වැඩේ කරගන්න පුලුවන්,
    pthread_join(pthread_t thread, void **retval); මේකෙ retval එකෙන් pthread_exit(void *retval); එකට දෙන පැරාමීටරේ ගන්න පුලුවන්

    ඒ කියන්නෙ ඔයාගෙ ලූප් එක බ්‍රේක් කරන්න ඕන void pthread_exit එකක් දාල එතකොට ඒ වැලියු එක pthread_join ගන්න පුලුවන් හෙට ඕන නම් සාම්පල් කෝඩ් එකක් ලියල දෙන්න පුලුවන්
     

    Elaaz

    Member
    Apr 23, 2012
    821
    37
    0
    C නම් කරලා නැහැ මචන්. ඒ උනාට ඕක while loop එකකින් කරන එක පොඩ්ඩක් අවුල් වගේ නැද්ද? උබට බැරිද card එකක් read කරපුවම event එකක් raise කරන්න? C වලින් event raise කරන හැටි නම් දන්නේ න කොල්ලෝ. while true දැම්ම කියන්නේ උබේ memory එකත් ගොඩක් utilize වෙනවා. :sorry:

    මම ඉගෙන ගන්න ගමන් මචන්. උඹ කීවම තමා මගේ ඔලුවට ඒක ආවේ. ඇත්ත මචන් මෙතනට while loop එකක් ගැලපෙන්නේ නැහැ. මම event handling ගැන තවම බලලා නැහැ. thanks මචන්. මම දැන් ඒක ගැන study කරනවා.
     

    Elaaz

    Member
    Apr 23, 2012
    821
    37
    0
    රිටන් වෙන්නෙ නැති වැඩක් (ඉන්ෆයිනයිට් ලූප් එකක් වගේ) හරි ගොඩක් වෙලා යන වැඩක් මේන් ත්‍රෙඩ් එකේ කරොත් ඇප්ලිකේශන් එක ස්ටක් වෙනවා ඒක අනිවාර්ය දෙයක්
    ඒක නිසා ලොකු වෙලාවක් යන වැඩ වෙනම ත්‍රෙඩ් එකක දාන එක තමයි හොදම වැඩේ


    Pthread join වලින් ඔය දීල තියන වැඩේ කරගන්න පුලුවන්,
    pthread_join(pthread_t thread, void **retval); මේකෙ retval එකෙන් pthread_exit(void *retval); එකට දෙන පැරාමීටරේ ගන්න පුලුවන්

    ඒ කියන්නෙ ඔයාගෙ ලූප් එක බ්‍රේක් කරන්න ඕන void pthread_exit එකක් දාල එතකොට ඒ වැලියු එක pthread_join ගන්න පුලුවන් හෙට ඕන නම් සාම්පල් කෝඩ් එකක් ලියල දෙන්න පුලුවන්

    මම ඔයා දුන්න hints වලින් solution එකක් ගන්න try කරන්නම්. ඉගෙනගන්න ඕනි නිසා මම කරලා බලන්නම්. ගැටළුවක් අවොත් මට උදවු කරන්න. බොහොම ස්තුති යාලුවා.
     

    Kasun k

    Well-known member
  • Mar 11, 2009
    10,357
    492
    83
    United States
    මම ඉගෙන ගන්න ගමන් මචන්. උඹ කීවම තමා මගේ ඔලුවට ඒක ආවේ. ඇත්ත මචන් මෙතනට while loop එකක් ගැලපෙන්නේ නැහැ. මම event handling ගැන තවම බලලා නැහැ. thanks මචන්. මම දැන් ඒක ගැන study කරනවා.

    Ela machan :yes:
     

    techboy2007

    Junior member
  • Feb 24, 2007
    72
    9
    8
    මම ඉගෙන ගන්න ගමන් මචන්. උඹ කීවම තමා මගේ ඔලුවට ඒක ආවේ. ඇත්ත මචන් මෙතනට while loop එකක් ගැලපෙන්නේ නැහැ. මම event handling ගැන තවම බලලා නැහැ. thanks මචන්. මම දැන් ඒක ගැන study කරනවා.

    iF YOU USE THE EVENT HANDLING MECHANISM STILL YOU NEED TO Block a Thread on receiving the event.

    If you want to event handling this is the easiest way

    use the epoll method. epoll() is a fucntion that awaits some event to happen on the specific file descripter.

    epoll can be made blocking and unblocking

    When the Thread detects the NFC card all it has to say is write(file_descriptor). epoll will unblock and you can do what ever u want

    Please check google for 1000 of examples of epoll , write()
     

    Elaaz

    Member
    Apr 23, 2012
    821
    37
    0
    iF YOU USE THE EVENT HANDLING MECHANISM STILL YOU NEED TO Block a Thread on receiving the event.

    If you want to event handling this is the easiest way

    use the epoll method. epoll() is a fucntion that awaits some event to happen on the specific file descripter.

    epoll can be made blocking and unblocking

    When the Thread detects the NFC card all it has to say is write(file_descriptor). epoll will unblock and you can do what ever u want

    Please check google for 1000 of examples of epoll , write()

    මචන් පුළුවන් නම් මට basic example එකක් දෙන්න. මම තවම ඉගෙනගන්න කෙනෙක්. ලොකු උදවුවක්.
     

    Elaaz

    Member
    Apr 23, 2012
    821
    37
    0
    රිටන් වෙන්නෙ නැති වැඩක් (ඉන්ෆයිනයිට් ලූප් එකක් වගේ) හරි ගොඩක් වෙලා යන වැඩක් මේන් ත්‍රෙඩ් එකේ කරොත් ඇප්ලිකේශන් එක ස්ටක් වෙනවා ඒක අනිවාර්ය දෙයක්
    ඒක නිසා ලොකු වෙලාවක් යන වැඩ වෙනම ත්‍රෙඩ් එකක දාන එක තමයි හොදම වැඩේ


    Pthread join වලින් ඔය දීල තියන වැඩේ කරගන්න පුලුවන්,
    pthread_join(pthread_t thread, void **retval); මේකෙ retval එකෙන් pthread_exit(void *retval); එකට දෙන පැරාමීටරේ ගන්න පුලුවන්

    ඒ කියන්නෙ ඔයාගෙ ලූප් එක බ්‍රේක් කරන්න ඕන void pthread_exit එකක් දාල එතකොට ඒ වැලියු එක pthread_join ගන්න පුලුවන් හෙට ඕන නම් සාම්පල් කෝඩ් එකක් ලියල දෙන්න පුලුවන්

    ඔයා කීව විදිහට මම try කළා. එත් pthread_join එක add කරපු ගමන් main thread එක stuck වෙනවා. return value එක හරියට එනවා. pthread_join එක add නොකලාම stuck වෙන්නේ නැහැ. එත් value එක catch කරගන්න බැහැ. උදවුවක් කරන්න පුලුවන්ද මට.
     
    Last edited: