Ejemplo n.º 1
0
bool run_server(program_state_t * state)
{
	while (true) {
		queue_param_t param;
		param.state = state;
		param.client = accept(state->listener, NULL, NULL);
		if (param.client == INVALID_SOCKET) {
			continue;
		}
		if (!QueueWorkItem(state->tpool, (LPTHREAD_FUNC)queue_func, (BYTE*)&param, sizeof(param), 
				(LPCLBCK_FUNC)queue_func_callback)) {
			_tprintf(_T("QueueWorkItem failed\n"));
			break;
		}
		
	}
	return false;
}
Ejemplo n.º 2
0
bool run_stress(program_state_t * state)
{
	while (true) {
		queue_param_t param;
		param.state = state;
		if (!QueueWorkItem(state->tpool, (LPTHREAD_FUNC)queue_func, (BYTE*)&param, sizeof(param), 
				(LPCLBCK_FUNC)queue_func_callback)) {
			_tprintf(_T("QueueWorkItem failed\n"));
			break;
		}
		int res = WaitForSingleObject(state->exit_evt, state->interval_ms);
		if (res == WAIT_OBJECT_0) {
			// exit event
			return true;
		}
		else if (res != WAIT_TIMEOUT) {
			// some error
			break;
		}
	}
	return false;
}
Ejemplo n.º 3
0
void TestThread(void *parameters)
{
    WorkQueue_t lowPriWorkQueue;
    WorkQueue_t highPriWorkQueue;
    int rc;
    int lowCount;
    int highCount;

    (void)parameters;
    printf("Test Thread starting...\n");


    while(1) {

        lowCount = 0;
        highCount = 1000;

        printf("[t] creating queues\n");
        
        lowPriWorkQueue = CreateWorkQueue();
        configASSERT(lowPriWorkQueue != NULL);

        highPriWorkQueue = CreateWorkQueueEx(   "wq", 
                                                DEFAULT_WORK_QUEUE_STACK_SIZE,
                                                6);
        configASSERT(highPriWorkQueue != NULL);

        while(1) {

            rc = QueueWorkItem(lowPriWorkQueue, WorkItemFunction, (void *)(intptr_t)lowCount++);
            configASSERT(rc == pdPASS);

            rc = QueueWorkItem(highPriWorkQueue, WorkItemFunction, (void *)(intptr_t)highCount++);
            configASSERT(rc == pdPASS);

            rc = QueueWorkItem(lowPriWorkQueue, WorkItemFunction, (void *)(intptr_t)lowCount++);
            configASSERT(rc == pdPASS);

            rc = QueueWorkItem(highPriWorkQueue, WorkItemFunction, (void *)(intptr_t)highCount++);
            configASSERT(rc == pdPASS);
        
            rc = QueueWorkItem(lowPriWorkQueue, WorkItemFunction, (void *)(intptr_t)lowCount++);
            configASSERT(rc == pdPASS);

            rc = QueueWorkItem(highPriWorkQueue, WorkItemFunction, (void *)(intptr_t)highCount++);
            configASSERT(rc == pdPASS);

            rc = QueueWorkItem(lowPriWorkQueue, WorkItemFunction, (void *)(intptr_t)lowCount++);
            configASSERT(rc == pdPASS);

            rc = QueueWorkItem(highPriWorkQueue, WorkItemFunction, (void *)(intptr_t)highCount++);
            configASSERT(rc == pdPASS);

            printf("[t] pausing\n");
            vTaskDelay(500);

            if (lowCount > 100) {

                printf("[t] resetting queues\n");

                DestroyWorkQueue(highPriWorkQueue);
                
                rc = QueueWorkItem(lowPriWorkQueue, WorkItemFunction, (void *)(intptr_t)lowCount++);
                configASSERT(rc == pdPASS);
                rc = QueueWorkItem(lowPriWorkQueue, WorkItemFunction, (void *)(intptr_t)lowCount++);
                configASSERT(rc == pdPASS);
                rc = QueueWorkItem(lowPriWorkQueue, WorkItemFunction, (void *)(intptr_t)lowCount++);
                configASSERT(rc == pdPASS);
                rc = QueueWorkItem(lowPriWorkQueue, WorkItemFunction, (void *)(intptr_t)lowCount++);
                configASSERT(rc == pdPASS);
                
                DestroyWorkQueue(lowPriWorkQueue);
                
                break;
            }
        }
    }

    configASSERT(!"CANNOT EXIT FROM A TASK");
}