MouseWheel, не работающий, когда опубликованный фильм имеет wmode = “прозрачный”?

Я нашел две проблемы.

Когда я пытался это сделать в Windows с MSys2, мой вывод был

The 1. thread got 101 points!
The 1. thread got 101 points!
The 2. thread got 0 points!
The 3. thread got 0 points!
The 5. thread got 0 points!
The 6. thread got 0 points!
The 6. thread got 0 points!
The 8. thread got 0 points!
The 9. thread got 0 points!
The 0. thread got 0 points!

Вы передаете адрес вашего счетчика циклов i потокам. Эта переменная не является константой, поэтому потоки могут прочитать значение, которое уже изменилось. Чтобы исправить это, я создал массив int ids[10] и передал каждому потоку свой собственный элемент массива идентификаторов.

Функция sleep использует аргумент unsigned int, поэтому вы эффективно вызываете sleep(0). С sleep(1) программа работает медленнее, но работает как положено. Вы можете использовать usleep, если вы хотите спать в течение доли секунды.

Измененная программа:

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <time.h>
#include <errno.h>

pthread_mutex_t mutex;
int arr[10];
int sum = 0;

void *add (void* input){

    int *id = (int*) input, x, s;
    int ind = *id;
    while (sum < 100){
        while (1){
            if (pthread_mutex_trylock(&mutex) != EBUSY)
                break;
        }
        if (sum < 100){
            x = rand() % 3;
            arr[ind] = arr[ind] + x;
            sum += x;
        }
        pthread_mutex_unlock(&mutex);
        usleep(100000);
    }
    printf("The %d. thread got %d points!\n", ind, arr[ind]);
    return NULL;
}

int main (void){

    int i;
    pthread_t threads[10];
    int ids[10];
    pthread_mutex_init(&mutex, NULL);
    srand(time(NULL));
    for (i = 0; i < 10; i++){
        ids[i] = i;
        if (pthread_create(&threads[i], NULL, add, &ids[i])){
            perror("pthread_create");
            exit(1);
        }
    }
    for (i = 0; i < 10; i++){
        if (pthread_join (threads[i], NULL)){
            perror("pthread_join");
        }
    }
    pthread_mutex_destroy(&mutex);
    return 0;
}
6
задан SolidSmile 26 November 2008 в 12:55
поделиться

2 ответа

2
ответ дан 17 December 2019 в 04:53
поделиться

Mousewheel не работает на меня ни один в AS3, когда я установил wmode=transparent. Кроме того, мое приложение флэш-памяти действует действительно странное и часто отказывает с wmode=transparent.

Плюс, это, кажется, не работает вообще над Firefox в соответствии с Linux... приложение флэш-памяти всегда выше всего.

Я не рекомендовал бы использовать wmode=transparent, если Ваше приложение не для очень определенного браузера, и Вы сделали обширное тестирование.

3
ответ дан 17 December 2019 в 04:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: