Ik ben momenteel mijn applicatie aan het porteren naar andere OS's en gebruik hierbij Boost voor threading - voorheen Windows API.
Ik zit nog met het omzetten van de Windows API calls van CreateSemaphore / ReleaseSemaphore / WaitForSingleObject te knoeien. Ik denk dat boost::interprocess::interprocess_semaphore is wat ik nodig heb.
ReleaseSemaphore is dan boost::interprocess::interprocess_semaphore::post()
WaitForSingleObject is dan boost::interprocess::interprocess_semaphore::wait()
Maar hoe zit het precies met CreateSemaphore? In de Windows API kan ik ze aanmaken met een initial count en een maximum count. De constructor van Boost heeft alleen maar een initial count.
oude code:
nieuwe code:
Maar nu heb ik geen maximum die een error geeft als mijn programma helemaal de weg kwijt raakt. Of zie ik iets over het hoofd?
Ik zit nog met het omzetten van de Windows API calls van CreateSemaphore / ReleaseSemaphore / WaitForSingleObject te knoeien. Ik denk dat boost::interprocess::interprocess_semaphore is wat ik nodig heb.
ReleaseSemaphore is dan boost::interprocess::interprocess_semaphore::post()
WaitForSingleObject is dan boost::interprocess::interprocess_semaphore::wait()
Maar hoe zit het precies met CreateSemaphore? In de Windows API kan ik ze aanmaken met een initial count en een maximum count. De constructor van Boost heeft alleen maar een initial count.
oude code:
C++:
1
2
3
4
5
| int main() { int len = 10; HANDLE empty = CreateSemaphore(NULL, len, len, NULL); HANDLE full = CreateSemaphore(NULL, 0, len, NULL); } |
nieuwe code:
C++:
1
2
3
4
5
6
| using boost::interprocess; int main() { int len = 10; interprocess_semaphore empty(len); interprocess_semaphore full(0); } |
Maar nu heb ik geen maximum die een error geeft als mijn programma helemaal de weg kwijt raakt. Of zie ik iets over het hoofd?
Windows Vista? *NEVER* Het waarom - Opera forever!!!
I've seen chickens that were more menacing. Chickens in a coma. On ice. In my fridge